2列列表作为列data.table

时间:2018-07-05 13:07:54

标签: r data.table

我有一个数据表,如:

foo <- data.table(a = c(1,2,3), b = c(4,5,6))

我要添加另一列c,该行按行/记录ab的列表。像这样:

data.table(a = c(1,2,3), b = c(4,5,6), c = c(list(1,4), list(2,5), list(3,6))) 

但是即使在示例中,它也只需要一个元素就可以回收

   a b c
1: 1 4 1
2: 2 5 4
3: 3 6 2
4: 1 4 5
5: 2 5 3
6: 3 6 6

但是我想要

   a b c
1: 1 4 list(1,4)
2: 2 5 list(2,5)
3: 3 6 list(3,6)

我也尝试过:

foo$c <- foo[, list('a' = a, 'b' = b)]
foo$c <- foo[, list('a' = a, 'b' = b), by = 1:nrow(foo)]
foo$c <- as.list(foo[, list('a' = a, 'b' = b)])

什么都没有。

2 个答案:

答案 0 :(得分:2)

一种方法是使用 Map list

  foo [,c:= Map(list,a,b)] []

#a b c
#1:1 4 <列表>
#2:2 5 <列表>
#3:3 6 <列表>
 

c 列是列表的列表:

  dput(foo $ c)
#list(list(1,4),list(2,5),list(3,6))
 

要保留名称:

  foo [,c:= Map(list,a = a,b = b)] []
#a b c
#1:1 4 <列表>
#2:2 5 <列表>
#3:3 6 <列表>

dput(foo $ c)
#list(list(a = 1,b = 4),list(a = 2,b = 5),list(a = 3,b = 6))
 

答案 1 :(得分:1)

使用list代替c似乎可行:

data.table(a = c(1,2,3), b = c(4,5,6), c = list(list(1,4), list(2,5), list(3,6))) 
   a b      c
1: 1 4 <list>
2: 2 5 <list>
3: 3 6 <list>