r - 如何处理 data.table 中的列表列

标签 r data.table

在合并数据的过程中,我经常以列表列结束(例如,左表中的一行在右表中有多个匹配项)

让我们定义

DT = data.table(x=list(c(1,2),c(3,4,5)),y=list(c(T,T),c(T,F,T)),z=c(1,2),N=c(1L,2L))
#       x               y z N
#1:   1,2       TRUE,TRUE 1 1
#2: 3,4,5 TRUE,FALSE,TRUE 2 2
  1. 是否可以就地修改 update xx[y]

我可以做到,但不能更新(而且看起来很难看):

DT1 = DT[,list(x=list(unlist(x)[unlist(y)])),by=N]
DT = cbind(DT[,x:=NULL],DT1[,list(x)])
                 y z N   x
1:       TRUE,TRUE 1 1 1,2
2: TRUE,FALSE,TRUE 2 2 3,5

现在假设我定义了 mySet = c(1,5) 并想检查 x %in% mySet 列的值

  1. 我该怎么做?

                     y z N   x isInMySet
    1:       TRUE,TRUE 1 1 1,2 TRUE,FALSE
    2: TRUE,FALSE,TRUE 2 2 3,5 FASLE,TRUE
    

最佳答案

另一种方法:

DT
       x               y z N
1:   1,2       TRUE,TRUE 1 1
2: 3,4,5 TRUE,FALSE,TRUE 2 2

DT[,x2:=mapply(`[`,x,y,SIMPLIFY=FALSE)]
DT
       x               y z N  x2
1:   1,2       TRUE,TRUE 1 1 1,2
2: 3,4,5 TRUE,FALSE,TRUE 2 2 3,5

DT[,isInMySet:=lapply(x2,`%in%`,c(1,5))]
DT
       x               y z N  x2  isInMySet
1:   1,2       TRUE,TRUE 1 1 1,2 TRUE,FALSE
2: 3,4,5 TRUE,FALSE,TRUE 2 2 3,5 FALSE,TRUE

关于r - 如何处理 data.table 中的列表列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14894562/

相关文章:

r - 在 R 中的 3 维样条中插值

r - 使用流程图可视化 R 代码

r - 设置键时data.table如何对字符串排序

r - data.table 中的 `unstack()` 相当于什么?

r - 无法连接 data.table 结果来自 R 中的 foreach 循环

R数据表: Count Occurrences Prior to Current Measurement

r - 如何从data.table中排除列?

r - 读取多个文件时的内存管理

r - 在 dplyr 中连接两个文本列

sql - 日期范围内的移动总和