【发布时间】:2015-11-19 04:48:30
【问题描述】:
我正在尝试用一些纵向数据做一些事情:
1) 将几年的数据合并到一张表中 例如
data1996.csv,
data1997.csv,
...,
data2013.csv
2) 定义要保留的变量列表
3) 删除所有与 Keepers 列表不匹配的列 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) 返回列表
这是我尝试删除除“保留”中的列之外的所有列的地方
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 年的数据(我最终得到了 'out',它在 1729 个变量中有 117905 个 obs)
之后,我想保存到 csv:
write.table(filteredOut, "myfile.csv", sep=",")
我也收到警告,其中超过 50 个,但它们似乎认为是 NULL 值。我遇到的问题是 1)理解数据类型(list、data.frame、data.table)和 2)实现 drop 命令的正确方法
非常感谢任何和所有帮助!
【问题讨论】:
-
关于
list类型问题,请记住data.frame只是list,其中每个列表项的长度相同。见is.list(data.frame(a=1))和unclass(data.frame(a=1,b=2))
标签: r data.table