我需要为所有列获取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
如何在左侧的列中添加标题,同时保持形状不变?感谢。
答案 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.table
与melt
library(data.table)
melt(setDT(demo)[, lapply(.SD, sum)])