我有一个数据表,如:
foo <- data.table(a = c(1,2,3), b = c(4,5,6))
我要添加另一列c,该行按行/记录a
和b
的列表。像这样:
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)])
什么都没有。
答案 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>