r - 如何对 R data.table 中的列表列进行操作以输出另一个列表列?

标签 r data.table

我仍然很难思考如何使用列表的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

我想为 numericcollistcol 的元素之间的绝对值创建一列:
> 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))])

?

最佳答案

使用 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

关于r - 如何对 R data.table 中的列表列进行操作以输出另一个列表列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49939936/

相关文章:

回归模型作为数据表中的列,R

r - 粘贴两个 data.table 列

r - 在不破坏类型的情况下计算组合

R data.table列名在函数中不起作用

r - 在带有刻面的图形上添加 R^2

r - 根据第一个的列值计算第二个数据表中的行而不合并

r - R中数据框中的重复行

r - 使用 getGEO 下载 GPL 文件时出错

r - 将空白插入向量中,例如 R 中的次要刻度标签

r - 如何在另一个图的给定位置绘制饼图?