如何重新排列R中的列表?

时间:2015-05-13 15:44:04

标签: r

我的输出是这样的:

class(results)
## [1] "list"

results
## [[1]]
##    default   n      FAC2   
## 1 all data 808 0.4740099
## [[2]]
##    default   n  FAC2        
## 1 all data 625 0.968
## [[3]]
##    default   n      FAC2
## 1 all data 796 0.2148241

我的问题是如何重新排列这些输出:

     n      FAC2
1  808 0.4740099
2  625 0.9680000
3  796 0.2148241

抓取n的所有值并将它们放在一个column中,并将其放在FAC2中。

1 个答案:

答案 0 :(得分:3)

results <- list(data.frame(default='all data',n=808,FAC2=0.4740099),data.frame(default='all data',n=625,FAC2=0.968),data.frame(default='all data',n=796,FAC2=0.2148241));
do.call(rbind,results)[,c('n','FAC2')];
##     n      FAC2
## 1 808 0.4740099
## 2 625 0.9680000
## 3 796 0.2148241

如果您不介意在结果中包含[,c('n','FAC2')]列,则可以放弃索引操作default

添加一列:

transform(do.call(rbind,results)[,c('n','FAC2')],new=(n+FAC2)^2);
##     n      FAC2      new
## 1 808 0.4740099 653630.2
## 2 625 0.9680000 391835.9
## 3 796 0.2148241 633958.0

或者:

x <- do.call(rbind,results)[,c('n','FAC2')];
x$new <- (x$n+x$FAC2)^2;
x;
##     n      FAC2      new
## 1 808 0.4740099 653630.2
## 2 625 0.9680000 391835.9
## 3 796 0.2148241 633958.0

列意味着:

rbind(x,apply(x,2,mean));
##     n      FAC2      new
## 1 808 0.4740099 653630.2
## 2 625 0.9680000 391835.9
## 3 796 0.2148241 633958.0
## 4 743 0.5522780 559808.1

或者:

rbind(x,colMeans(x));
##     n      FAC2      new
## 1 808 0.4740099 653630.2
## 2 625 0.9680000 391835.9
## 3 796 0.2148241 633958.0
## 4 743 0.5522780 559808.1

identity列中捕获列表组件编号:

do.call(rbind,Map(cbind,results,identity=1:length(results)));
##    default   n      FAC2 identity
## 1 all data 808 0.4740099        1
## 2 all data 625 0.9680000        2
## 3 all data 796 0.2148241        3