仅在非常健壮的数据集中保留某些列的列表?

时间:2015-11-19 04:48:30

标签: r data.table

我试图用一些纵向数据做一些事情:

1)将几年的数据合并到一个表中 e.g。

data1996.csv,
data1997.csv,
...,
data2013.csv

2)定义要保留的变量列表

3)删除与守护者列表不匹配的所有列 4)将结果数据集写入CSV文件

require(data.table)
setwd("~/my/directory")

定义文件路径的名称

paths <- list()

列出我想要汇总的文件

for(i in 0:17) 
{
  paths[i]<- paste("MERGED",1996+i,"_PP.csv",sep="")
}

定义要保留的变量列表

keeps <- list(
  "CITY",
  "ZIP",
  "LONGITUDE",
  "LATITUDE",
   ...
)

对路径列表中的所有文件运行fread

out <- rbindlist(lapply(paths, fread), use.names=TRUE)

由于某种原因,typeof(out)返回列表

这是我尝试删除除&#34; keep&#34;

之外的所有列的地方
filteredOut <- out[,keeps,drop=FALSE]

但它只是给我一个我想要保留的28个变量的列表

我也试过了:

filteredOut <- out[keeps]

但是我收到了这个错误:

  Error in `[.data.table`(out, keeps) : 
  When i is a data.table (or character vector), x must be keyed (i.e. sorted, and, marked as sorted) so data.table knows which columns to join to and take advantage of x being sorted. Call setkey(x,...) first, see ?setkey.
    write.table(filteredOut, "testing.csv", sep=",")

我的脚本似乎成功地结合了17年的数据(我最终得到了&#39; out&#39;其中包含了1729个变量中的117905个障碍物)

之后,我想保存到csv:

write.table(filteredOut, "myfile.csv", sep=",")

我也收到警告,其中超过50个,但他们似乎认为是NULL值。我遇到的问题是1)理解数据类型(list,data.frame,data.table)和2)实现drop命令的正确方法

非常感谢任何和所有帮助!

1 个答案:

答案 0 :(得分:3)

我们可以unlist保持&#39;并使用with=FALSE对列进行子集化。

out[, unlist(keeps), with=FALSE]