每次按不同的数量

时间:2018-03-12 16:54:47

标签: r data.table

我想知道为什么这段代码不能简单地连接两个数据帧。

library(data.table)
dt <- data.table(a=c(1,2))

df <- vector("list", 2)
df[[1]] <- as.list(data.frame(b=c('a','b','c', 'd'), 
                              c=c(11, 22, 33, 99), 
                              z=c('aa','bb','cc', 'dd')))
df[[2]] <- as.list(data.frame(b=c('b','e', 'f', 'g'),
                              c=c(44,55,66,77), 
                              z=c('gg','bb','hh', 'dd')))   
getData <- function(i) {
  return(df[[i]])
}

dt <- dt[, getData(a), by=a]
print(dt)

我期待的结果如下:

   a b  c  z
1: 1 a 11 aa
2: 1 b 22 bb
3: 1 c 33 cc
4: 1 d 99 dd
5: 2 b 44 gg
6: 2 e 55 bb
7: 2 f 66 hh
8: 2 g 77 dd

但我得到以下内容:

   a b  c  z
1: 1 a 11 aa
2: 1 b 22 bb
3: 1 c 33 cc
4: 1 d 99 dd
5: 2 a 44 cc
6: 2 b 55 aa
7: 2 c 66 dd
8: 2 d 77 bb

1 个答案:

答案 0 :(得分:2)

如果您添加df$a的定义,请执行以下操作:

df[[1]] <- as.list(data.frame(a=1,
                              b=c('a','b','c', 'd'), 
                              c=c(11, 22, 33, 99), 
                              z=c('aa','bb','cc', 'dd'))) 

df[[2]] <- as.list(data.frame(a=2,
                                  b=c('b','e', 'f', 'g'),
                                  c=c(44,55,66,77), 
                                  z=c('gg','bb','hh', 'dd')))

我相信你需要做的就是使用rbindlist(),如下所示:

> result <- rbindlist(df)
> result
   a b  c  z
1: 1 a 11 aa
2: 1 b 22 bb
3: 1 c 33 cc
4: 1 d 99 dd
5: 2 b 44 gg
6: 2 e 55 bb
7: 2 f 66 hh
8: 2 g 77 dd