同时向R中的data.table添加两列

时间:2014-06-19 07:28:13

标签: r data.table

我有data.table

DT <- data.table(num=c(1,4,6,7,8,12,13, 15), let=rep(c("A","B"), each=4))

显示如下:

   num let
1:   1   A
2:   4   A
3:   6   A
4:   7   A
5:   8   B
6:  12   B
7:  13   B
8:  15   B

我定义了这个功能:

f<-function(x){return(c(x+1,x+2))}

我想得到这个:

   let V1 V2
1:   A  2  3
2:   A  5  6
3:   A  7  8
4:   A  8  9
5:   B  9 10
6:   B 13 14
7:   B 14 15
8:   B 16 17

我运行此代码:

DT[,list(f(num)),by=let]

DT[,f(num),by=let]

但我明白了:

    let V1
 1:   A  2
 2:   A  5
 3:   A  7
 4:   A  8
 5:   A  3
 6:   A  6
 7:   A  8
 8:   A  9
 9:   B  9
10:   B 13
11:   B 14
12:   B 16
13:   B 10
14:   B 14
15:   B 15
16:   B 17

我想补充一点,我根本不想修改函数f

1 个答案:

答案 0 :(得分:8)

DT[, as.data.table(matrix(f(num), ncol=2)), by=let]
#   let V1 V2
#1:   A  2  3
#2:   A  5  6
#3:   A  7  8
#4:   A  8  9
#5:   B  9 10
#6:   B 13 14
#7:   B 14 15
#8:   B 16 17

当然,简单地更改功能会更好,更有效,因为它的设计是问题,而不是data.table。无论是否在data.table中使用,您的函数都将始终返回原子向量。

f <- function(x) list(x+1, x+2)
DT[, f(num), by=let]