如何rbind向量到不同的列,留下来港在剩余的细胞(How to rbind vectors int

2019-10-22 21:55发布

比方说,我有不同长度的向量数目不详的,我想有效rbind他们在一起,他们必须各自占据造成data.frame不同列中的警告。 你可以假设向量包含在列表中,但你不能依赖于可以在列表中定义的任何组件的名称。

下面我提出的随机样本输入( lv )和差的溶液,以产生所需要的输出,通过重复手动构建所得data.frame NA和由名称每一个输入矢量组合。

set.seed(1);
lv <- list(a=sample(30,5),b=sample(30,3),c=sample(30,7),d=sample(30,2));
lv;
## $a
## [1]  8 11 17 25  6
##
## $b
## [1] 27 28 19
##
## $c
## [1] 19  2  6  5 18 10 30
##
## $d
## [1] 15 21
##
with(lv,data.frame(a=c(a,rep(NA,length(b)+length(c)+length(d))),b=c(rep(NA,length(a)),b,rep(NA,length(c)+length(d))),c=c(rep(NA,length(a)+length(b)),c,rep(NA,length(d))),d=c(rep(NA,length(a)+length(b)+length(c)),d)));
##     a  b  c  d
## 1   8 NA NA NA
## 2  11 NA NA NA
## 3  17 NA NA NA
## 4  25 NA NA NA
## 5   6 NA NA NA
## 6  NA 27 NA NA
## 7  NA 28 NA NA
## 8  NA 19 NA NA
## 9  NA NA 19 NA
## 10 NA NA  2 NA
## 11 NA NA  6 NA
## 12 NA NA  5 NA
## 13 NA NA 18 NA
## 14 NA NA 10 NA
## 15 NA NA 30 NA
## 16 NA NA NA 15
## 17 NA NA NA 21

注意:您不必使用rbind()我只是认为这是一个引进的问题,最明显的方式。 思考这个的另一种方式是我要cbind()向量为不同的(从来没有重叠)行。

Answer 1:

尝试

library(reshape2)
library(data.table)
dcast(setDT(melt(lv))[, rn:=.I], rn~L1, value.var='value')

要么

dcast(setDT(melt(lv), keep.rownames=TRUE), 
                  as.numeric(rn)~L1, value.var='value')

或由@大卫Arenburg建议

recast(lv, seq_along(unlist(lv)) ~ L1)

或使用base R

d1 <- stack(lv)
reshape(transform(d1, rn=1:nrow(d1)), idvar='rn',
                         timevar='ind', direction='wide')


文章来源: How to rbind vectors into different columns, leaving NAs in remaining cells