【问题标题】:Put column sums in a new row in a matrix将列总和放在矩阵的新行中
【发布时间】:2016-02-03 21:52:59
【问题描述】:

我有一个数据框,其中包含第一列中的市政名称(因素)和第二列和第三列中的项目数量(整数)。

Var.1<-c("Andover", "Avon", "Bethany")
Freq.x<-c(2,NA,10)
Freq.y<-c(4,2,9)
Projects<-data.frame(Var.1,as.integer(as.numeric(Freq.y)),as.integer(as.numeric(Freq.x)))

[注意:我在这里将第二列和第三列设为整数,因为这就是它们在我的实际数据集中的分类方式。]

我能够使用以下方法获取行的总和:

Projects$Sum<-rowSums(Projects[,2:3])

但是,我无法弄清楚如何获取列总和。我尝试使用以下公式:

Projects[Total,]<-colSums(Projects[2:3,])

我得到错误:

colSums(Projects[2:3, ]) 中的错误:“x”必须是数字

即使我将第二列和第三列转换为as.numeric,我也得到相同的响应。

有人可以建议如何获取列总和在底部创建一个新行来存放结果吗?

【问题讨论】:

  • 它应该是colSums(Projects[,2:3]) 在你的代码中,它是第一列不是数字的所有列的第二第三行的子集。
  • 我建议使用rbind(Projects, colSums(Projects)) 之类的东西。然而,事情并没有那么简单:a) 第一列不是数字; b) 第一列是一个因子,不能轻易取任意值。
  • @akrun 您的建议提供了每列的总和。但是,我想将它嵌入到 Projects 数据框的底部,以便有第四行包含列总和。我该怎么做?
  • @Ott Toomet 我知道我无法使用您提供的功能,因为第一列不是数字。鉴于在此表中某些列是因子,而其他列是数字,我如何获取数字的列总和?
  • @Danny 如果您可以将第一列设置为 row.names 并将“项目”设置为 matrix, we can use addmargins`

标签: r sum col


【解决方案1】:

你可以这样做:

Var.1<-c("Andover", "Avon", "Bethany")
Freq.x<-c(2,NA,10)
Freq.y<-c(4,2,9)
freq <- cbind(Freq.x, Freq.y)
freq <- rbind(freq, colSums(freq, na.rm=TRUE))
Projects <- data.frame(name=c(Var.1, "Total"), freq)

特别是:将数字部分分开并计算其总和;将“TOtal”添加到字符向量中,然后将其转换为因子,然后制作data.frame

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-12-11
    • 2019-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-06
    • 2020-11-23
    相关资源
    最近更新 更多