我有一个数据框,我想在其中添加一个额外的行,以总计每一列的值。例如,假设我有以下数据:

x <- data.frame(Language=c("C++", "Java", "Python"),
                Files=c(4009, 210, 35),
                LOC=c(15328,876, 200),
                stringsAsFactors=FALSE)

数据如下:
  Language Files   LOC
1      C++  4009 15328
2     Java   210   876
3   Python    35   200

我的直觉是这样做:
y <- rbind(x, c("Total", colSums(x[,2:3])))

这有效,它计算总计:
> y
  Language Files   LOC
1      C++  4009 15328
2     Java   210   876
3   Python    35   200
4    Total  4254 16404

问题在于,Files和LOC列都已转换为字符串:
> y$LOC
[1] "15328" "876"   "200"   "16404"

我知道发生这种情况是因为我创建了一个 vector c("Total", colSums(x[,2:3]),其输入既是数字又是字符串,并且它将所有元素都转换为通用类型,因此所有 vector 元素都是相同的。然后,"file"和“LOC”列也会发生相同的情况。

有什么更好的方法?

最佳答案

请从管理员程序包中查看adorn_totals():

library(janitor)
x %>%
  adorn_totals("row")

#>  Language Files   LOC
#>       C++  4009 15328
#>      Java   210   876
#>    Python    35   200
#>     Total  4254 16404

数字列仍为数字类。

免责声明:我创建了此程序包,其中包括adorn_totals(),它正是为此任务而制作的。

关于r - 将行添加到数据框中,每列的总和为,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4946873/

10-12 18:00
查看更多