【发布时间】:2019-05-13 20:23:39
【问题描述】:
我有一个从 csv 文件(本质上是 SQL 查询的结果)中读取的大 data.table。每条记录都有几组 20 个字段,它们是特定事物(例如,特定类型的付款)的年度数据。这是一个简化版本,只有 5 行和 3 个年度贡献字段
> dt <- data.table(id=1:5, dob = sample(1950:2000, 5), cont01=11:15, cont02=21:25, cont03=31:35)
> dt
id dob cont01 cont02 cont03
1: 1 1981 11 21 31
2: 2 1954 12 22 32
3: 3 1985 13 23 33
4: 4 1986 14 24 34
5: 5 1970 15 25 35
我希望至少得到一个向量列表,每个记录一个向量:
list (c(11, 21, 31), c(12, 22, 32), c(13, 23, 33), c(14, 24, 34), c(15, 25, 35))
不过,理想情况下,我想我希望向量位于数据表中,作为一个新列。更理想的是,我需要向量是固定长度的,每个元素都在特定年龄支付。所以第一行这 3 列的向量是
> c(rep(0, 5), 11, 21, 31, rep(0, 38))
向量中的第一个年龄是 15 岁,最后一个是 60 岁。
从this question 看来,列表的 data.table 列是可能的。但是我还没有弄清楚如何从同一行中的其他列创建内容。
例如:
> dt[1, list(list(c(.SD))), .SDcols=c("cont2011", "cont2012", "cont2013")]
V1
1: <list>
> dt[1, list(list(c(.SD))), .SDcols=c("cont2011", "cont2012", "cont2013")][,V1]
[[1]]
[[1]]$`cont2011`
[1] 11
[[1]]$cont2012
[1] 21
[[1]]$cont2013
[1] 31
似乎并没有真正提供我想要的东西,因为我看不到如何在V1 列的内容上做一些漂亮的矢量事情。 (我需要在我得到的向量上做很多欧几里得距离类型的事情)。
有什么想法吗?对替代方法的建议? data.table 中有大约 1300 万行,以及 5 组 20(左右)列,我希望能够这样做。
【问题讨论】:
标签: r data.table