如何转换colSums导致R到数据框

时间:2016-06-04 08:20:26

标签: r dataframe

我需要为所有列获取col sum并将结果放在一个带有colnames的数据框中,并将它们的总和作为两列。但是如果我这样做,列名似乎变成索引而不是col本身。

demo=data.frame(a=runif(10),b=runif(10,max=2),c=runif(10,max=3))
as.data.frame(colSums(demo))

不受欢迎的结果:

   colSums(demo)
a      4.083571
b     11.698794
c     14.082574

期望的结果:

colname colSums(demo)
a      4.083571
b     11.698794
c     14.082574

如何在左侧的列中添加标题,同时保持形状不变?感谢。

5 个答案:

答案 0 :(得分:4)

一种可能性是使用t()

转置结果
data.frame(t(colSums(demo)))
                    a        b        c
colSums.demo. 5.782475 10.46739 18.46751

要更改输出中行的名称,我们可以使用rownames,例如:

`rownames<-`(data.frame(t(colSums(demo))), "myColsum")
             a        b        c
myColsum 5.782475 10.46739 18.46751

答案 1 :(得分:4)

您可以使用stack()setNames()

来实现所需的输出
setNames(nm=c('colname','colSums(demo)'),stack(colSums(demo))[2:1]);
##   colname colSums(demo)
## 1       a      4.083571
## 2       b     11.698794
## 3       c     14.082574

答案 2 :(得分:3)

试试这个:

as.data.frame(lapply(demo, sum))

结果:

         a        b       c
1 6.400121 10.16047 10.6528

答案 3 :(得分:3)

> demo = data.frame(a=runif(10),b=runif(10,max=2),c=runif(10,max=3))
> df <- data.frame(colname = names(demo),colSums_demo=colSums(demo))
> print(df, row.names=F)
  colname colSums_demo
        a     4.754546
        b    12.488904
        c    18.152095

答案 4 :(得分:1)

我们可以将data.tablemelt

一起使用
library(data.table)
melt(setDT(demo)[, lapply(.SD, sum)])