【发布时间】:2018-10-01 01:41:21
【问题描述】:
我仍然很难考虑如何使用作为列表的 R data.table 列。
这是一个 R 数据表:
library(data.table)
dt = data.table(
numericcol = rep(42, 8),
listcol = list(c(1, 22, 3), 6, 1, 12, c(5, 6, 1123), 3, 42, 1)
)
> dt
numericcol listcol
1: 42 1,22, 3
2: 42 6
3: 42 1
4: 42 12
5: 42 5, 6,1123
6: 42 3
7: 42 42
8: 42 1
我想为numericcol 和listcol 的元素之间的绝对值创建一个列:
> dt
numericcol listcol absvals
1: 42 1,22, 3 41, 20, 39
2: 42 6 36
3: 42 1 41
4: 42 12 30
5: 42 5, 6,1123 37, 36, 1081
6: 42 3 39
7: 42 42 0
8: 42 1 41
所以,我的第一个想法是使用sapply(),如下所示:
dt[, absvals := sapply(listcol, function(x) abs(x-numericcol))]
这会输出以下内容:
> dt
numericcol listcol absvals
1: 42 1,22, 3 41
2: 42 6 20
3: 42 1 39
4: 42 12 41
5: 42 5, 6,1123 20
6: 42 3 39
7: 42 42 41
8: 42 1 20
所以,absvals 现在是一列未列出的元素,每行都有一个单独的元素,并且是与 data.table 不同的维度。
(1) 如何创建absvals 来保留listcol 的列表结构?
(2) 在这种情况下,如果我只对值的向量感兴趣,R data.table 用户如何创建这样的数据结构?
也许
vec = as.vector(dt[, absvals := sapply(listcol, function(x) abs(x-numericcol))])
?
【问题讨论】:
标签: r data.table