我试图用一些纵向数据做一些事情:
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命令的正确方法
非常感谢任何和所有帮助!
答案 0 :(得分:3)
我们可以unlist
保持&#39;并使用with=FALSE
对列进行子集化。
out[, unlist(keeps), with=FALSE]