【问题标题】:Sum columns of data frame when condition is met满足条件时对数据框的列求和
【发布时间】:2017-10-07 15:30:06
【问题描述】:

我想创建一个新列,它是现有列中仅正值的总和。因此,在 TotalImportSE3 列中,我想仅获得正值的列 SE3-NO1、SE3-DK1、SE3-FI、SE3-SE4 的总和,如果它们都不是正值,则总和应为 0。

      SE3 - NO1 SE3 - DK1 SE3 - FI SE3 - SE2 SE3 - SE4 TotalImportSE3
 47      1114       666     -225      2716     -3784             NA
 48      1009       671     -151      1491     -2943             NA
 54      1057       711    -1062      1658     -2201             NA
 55      1077       711    -1213      3492     -3015             NA
 94       772       414     -501      2904     -2262             NA
 95      -786      -314     -407     -2368     -2005             NA

输出应如下所示:

      SE3 - NO1 SE3 - DK1 SE3 - FI SE3 - SE2 SE3 - SE4 TotalImportSE3
 47      1114       666     -225      2716     -3784             4496
 48      1009       671     -151      1491     -2943             3171
 54      1057       711    -1062      1658     -2201             3426
 55      1077       711    -1213      3492     -3015             5280
 94       772       414     -501      2904     -2262             4090
 95      -786      -314     -407     -2368     -2005             0

到目前为止我的努力:

df1 <- df$`SE3 - NO1`[which(Data$`SE3 - NO1`>0)]
df2 <- df$`SE3 - DK1`[which(Data$`SE3 - DK1`>0)]

但它确实创建了两个不同长度的向量,所以它完全搞砸了。

【问题讨论】:

  • 我尝试使用 sum 和 which 函数,但到目前为止,我设法提取了单独列的正值,然后对它们求和,而不是同时对所有列求和。
  • 您应该编辑您的问题以反映此信息。该网站旨在帮助他人,当您似乎没有做出任何努力时,人们就不太愿意提供帮助。
  • 在你的最后一行,你的意思是 314 是 -314 吗?
  • 是的,确实应该是-314,到目前为止,我用我的新手努力编辑了这个问题。

标签: r sum


【解决方案1】:

你可以试试这个:

 df$TotalImportSE3=rowSums(df*(df>0))
  • df 是您的数据框的名称

【讨论】:

  • 完美运行!但是,我真的不明白 * 符号是如何工作的,它是否只是为数据框设置了一个条件来仅对正数据框值求和?这些可以是多个条件吗?
  • df>0 为正条件返回 TRUE 和 FALSE(大于零的数据框对象为 TRUE,小于零的为 FALSE)...然后乘以 df 它返回正数
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-24
  • 2017-09-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多