【问题标题】:Conditional sum of rows by a column value按列值的条件总和
【发布时间】:2017-04-04 20:05:41
【问题描述】:

我正在尝试对包含不同列中的值的行求和。

rowSums(wood_plastics[,c(48,52,56,60)], na.rm=TRUE)

上面得到了我确定的列的行总和,但现在我只想对不同列中包含特定年份的行求和。我试过这个

rowSums(mydata[,c(48,52,56,60)], na.rm=TRUE, mydata$current_year = '2015') 

没有成功。我想我可能必须从初始列列表中的列号 7 中挑出年份值。

感谢任何帮助。

【问题讨论】:

  • 可能 rowSums(mydata[,c(48,52,56,60)] * (mydata$current_year == '2015') , na.rm=TRUE) 在这些行中返回 0 或 rowSums(mydata[,c(48,52,56,60)], na.rm=TRUE)[mydata$current_year != '2015'] 删除这些行。
  • 这看起来可行!你能告诉我代码行中的 * 是做什么的吗?
  • @lmo 方法也有效。 mydata$current_year == '2015' 会给你一个带有 TRUE 或 FALSE 的向量。 TRUE 当年份是 2015

标签: r


【解决方案1】:

我只想说

rowSums(mydata[mydata$current_year == '2015',c(48,52,56,60)], na.rm=TRUE) 

由于我没有原始数据框,我无法为您提供结果。但这个想法是,您可以在选择您想要的列的同时在逗号之前选择您想要的行。这对你来说够清楚了吗?

【讨论】:

  • 这完全有道理,我只是按我的方式编写它,因为我需要在事后按年过滤,但你的方式绝对是要走的路。你能建议一种方法来在上面添加多行,每行都包含 2015 年吗?
  • 我明天会检查你的问题(现在已经在床上了)。您能否将答案标记为“答案”,以便其他人也可以找到它?谢谢。
  • 您好,您的问题能再准确一点吗? “在上面添加多行”到底是什么意思?您想汇总您的数据吗?如果你能更好地指定你想要获得的东西,我相信我们可以帮助你:-)
  • 我现在可以看到它并没有想象的那么清晰。我要做的是提取包含特定年份的每一列。我有当前年份、上一年 1、上一年 2,但它们都没有排列,因此特定年份可以在三列中的任何一列中。我想从上述所有列中找到 2015 年,而您的示例查看 mydata$current_year == '2015' 并且我希望添加类似 mydata$current_year == '2015', mydata$prev_year_1 == '2015', mydata$prev_year_2 == '2015' 或 mydata[c(,4:6)] 我希望这是有道理的。
  • 您可以简单地使用OR 运算符|AND & 并添加诸如rowSums(mydata[mydata$current_year == '2015' & mydata$prev_year_1 == '2015',c(48,52,56,60)], na.rm=TRUE) 之类的条件
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-12-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-14
  • 2021-03-24
相关资源
最近更新 更多