首页 文章

消除R列表中的特定行

提问于
浏览
0

以下R代码生成一个列表,其中包含从单个目录中读取的50个csv文件的内容 . 每个csv文件都有不同的行数 .

fs <- list.files(my_dir, pattern=".csv$",full.names=TRUE)
l <- lapply(fs, read.csv, stringsAsFactors=FALSE)

当我查看列表时,我需要摆脱一些行,以便我可以将列表转换为单个数据帧 . 有三种“问题”行:

  • 在第一个位置以 [[I]] 开头的行,其中 I 是整数 1:50 ,对应于导入的csv文件的序列,501.csv,502.csv等 .

  • 包含列名的行 . 我尝试在list.files函数中使用row.names = FALSE,但它生成了以下错误: Error in list.files(my_dir, pattern = ".csv$", full.names = TRUE, row.names = FALSE) . 我也尝试将skip = 1添加到我的lapply函数中 . 它删除了列名,但创建了一个不同的问题:X附加到行的第一个和最后一个字段的前面,其中包含与每个csv文件关联的第一个观察点 .

  • 在RStudio控制台中查看时显示为空白的行,至少是肉眼 . 当我尝试将列表转换为数据帧时,我无法判断这些明显空行是否会导致问题 .

下面是str(l)和dput(sapply(l,head,1))的输出 . 我只使用两个部分文件在测试环境中运行它 .

> str(l)
List of 2
 $ :'data.frame':   100 obs. of  4 variables:
  ..$ Date: chr [1:100] "12/31/95" "1/1/96" "1/2/96" "1/3/96" ...
  ..$ sub1: num [1:100] NA NA NA NA NA NA NA NA NA NA ...
  ..$ sub2: num [1:100] NA NA NA NA NA NA NA NA NA NA ...
  ..$ tech: int [1:100] 503 503 503 503 503 503 503 503 503 503 ...
 $ :'data.frame':   66 obs. of  4 variables:
  ..$ Date: chr [1:66] "7/4/98" "7/5/98" "7/6/98" "7/7/98" ...
  ..$ sub1: num [1:66] NA NA 1.62 NA NA 1.32 NA NA 1.9 NA ...
  ..$ sub2: num [1:66] NA NA 1.39 NA NA 0.506 NA NA 1.06 NA ...
  ..$ tech: int [1:66] 504 504 504 504 504 504 504 504 504 504 ...

> dput(sapply(l, head, 1))
structure(list("12/31/95", NA_real_, NA_real_, 503L, "7/4/98", 
    NA_real_, NA_real_, 504L), .Dim = c(4L, 2L), .Dimnames = list(
    c("Date", "sub1", "sub2", "tech"), NULL))

1 回答

  • 0

    R 中没有"right"或"left"名称对齐 . 如果您不想要 Headers ,请在 read.csv 调用中使用参数 headers=FALSE .

    由于缺乏对 read.csv 的熟悉,你的其他问题也会乍一看 . 我建议使用 read.csv(file_name, header=FALSE) 读取单个文件并尝试使用其他参数,例如 fill ,直到您确信正在读取所需文件内容为止 .

相关问题