R 梳理不相等数据帧的列表

R 梳理不相等数据帧的列表,r,R,我正在尝试合并一个不相等数据帧的列表;明显的do.call(rbind,df.lst)失败了,但真正的问题是用NAs填充它 df.lst <- list(A=data.frame(a=c(1,2),b=c(5,4),d=c(2,3),e=c(1,1),f=c(1,2),g=c(1,2)), B=data.frame(a=c(1,2),b=c(3,2),d=c(2,3)), C=data.frame(a=c(1,2),b=c(4,3

我正在尝试合并一个不相等数据帧的列表;明显的
do.call(rbind,df.lst)
失败了,但真正的问题是用
NA
s填充它

df.lst <- list(A=data.frame(a=c(1,2),b=c(5,4),d=c(2,3),e=c(1,1),f=c(1,2),g=c(1,2)),
               B=data.frame(a=c(1,2),b=c(3,2),d=c(2,3)),
               C=data.frame(a=c(1,2),b=c(4,3),d=c(1,2),e=c(1,3))
               )
但在那之后我就被卡住了。建议可以对列表进行索引,这样会自动用
NA
s填充列表

df.lst <- list(A=data.frame(a=c(1,2),b=c(5,4),d=c(2,3),e=c(1,1),f=c(1,2),g=c(1,2)),
               B=data.frame(a=c(1,2),b=c(3,2),d=c(2,3)),
               C=data.frame(a=c(1,2),b=c(4,3),d=c(1,2),e=c(1,3))
               )
一旦我有了填充列表,我预期会出现一个简单的
do.call()
,如前所述。(我试图把答案保留在R的基础上,尽管有许多类似的问题,但我似乎找不到这个精确问题的答案)。

试试看

library(plyr)
ldply(df.lst,data.frame)

  .id a b d  e  f  g
1   A 1 5 2  1  1  1
2   A 2 4 3  1  2  2
3   B 1 3 2 NA NA NA
4   B 2 2 3 NA NA NA
5   C 1 4 1  1 NA NA
6   C 2 3 2  3 NA NA
如果需要,可以删除第一列:

df<-ldply(df.lst,data.frame)
df[,-1]

a b d  e  f  g
1 1 5 2  1  1  1
2 2 4 3  1  2  2
3 1 3 2 NA NA NA
4 2 2 3 NA NA NA
5 1 4 1  1 NA NA
6 2 3 2  3 NA NA
df我们可以使用

library(dplyr)
bind_rows(df.lst)


如果您想坚持使用base R,可以执行以下操作:

### Get all the columns names
col <- unique(unlist(sapply(df.lst, names)))
col
## [1] "a" "b" "d" "e" "f" "g"

### Fill the missing columns with NA
df.lst <- lapply(df.lst, function(df) {
  df[, setdiff(col, names(df))] <- NA
  df
})

### Then Bind it
do.call(rbind, df.lst)
##     a b d  e  f  g
## A.1 1 5 2  1  1  1
## A.2 2 4 3  1  2  2
## B.1 1 3 2 NA NA NA
## B.2 2 2 3 NA NA NA
## C.1 1 4 1  1 NA NA
## C.2 2 3 2  3 NA NA
###获取所有列的名称

coltry
库(data.table);rbindlist(df.lst,fill=TRUE)
bind_行(df.lst)
dplyr
开始,NA后面的“df”是做什么的?您需要返回更改后的
数据。frame
(用NA填充)在函数调用结束时,如果希望
lappy
按自己的意愿修改每个
data.frame
。它适用于我的假数据集,但不适用于我的真实数据集,我是否需要用dput问一个新问题?
### Get all the columns names
col <- unique(unlist(sapply(df.lst, names)))
col
## [1] "a" "b" "d" "e" "f" "g"

### Fill the missing columns with NA
df.lst <- lapply(df.lst, function(df) {
  df[, setdiff(col, names(df))] <- NA
  df
})

### Then Bind it
do.call(rbind, df.lst)
##     a b d  e  f  g
## A.1 1 5 2  1  1  1
## A.2 2 4 3  1  2  2
## B.1 1 3 2 NA NA NA
## B.2 2 2 3 NA NA NA
## C.1 1 4 1  1 NA NA
## C.2 2 3 2  3 NA NA