我仍然很难想到如何使用R data.table列作为列表.
这是一个R data.table:
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
Run Code Online (Sandbox Code Playgroud)
我想为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
Run Code Online (Sandbox Code Playgroud)
所以,我的第一个想法是使用sapply()如下:
dt[, absvals := sapply(listcol, function(x) abs(x-numericcol))]
Run Code Online (Sandbox Code Playgroud)
这输出如下:
> 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
Run Code Online (Sandbox Code Playgroud)
因此,absvals现在是一列未列出的元素,每行中都有一个单独的元素,并且是与data.table不同的维度.
(1)如何创建absvals保留列表结构listcol?
(2)在这些情况下,如果我只对值的向量感兴趣,那么R data.table用户如何创建这样的数据结构?
也许
vec = as.vector(dt[, absvals := sapply(listcol, function(x) abs(x-numericcol))])
Run Code Online (Sandbox Code Playgroud)
?
另一种解决方案mapply:
dt[, absvals := mapply(listcol, numericcol, FUN = function(x, y) abs(x-y))]
#output
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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
123 次 |
| 最近记录: |