df<-data.frame(a=1:100)
sum(df$a>50)
[1] 50
我要找的答案是51 + 52 ...... 100的总和。我尝试搜索,但只找到不好的问题/评级或导致Excel sumif。感谢
答案 0 :(得分:3)
尝试以下方法:
sum(subset(df,a>50))
答案 1 :(得分:1)
使用“地址括号”中的条件可以在没有子集的情况下工作。
sum( df[ df$a>50, ])
答案 2 :(得分:1)
我认为你的问题还有一些问题。我会尝试一次回答一次:
您创建了一个data.frame,但之后只将其用于向量。让我们尝试创建一个变量来回答你的问题:
a = 1:50
您创建了数据,其中每个变量(例如x [10])等于索引的值(例如10)。正如我们将在下面看到的,这可能会导致一些混淆,因为有多种方法可以在R中进行索引。所以让我们使用它:
set.seed(0)
a = sample(100, n=50)
在你的问题中,你称为sum(a> 50)。首先,您应该尝试了解一个&gt; 50回报。它可能不是你的想法!
a > 50
[1] TRUE FALSE FALSE TRUE TRUE FALSE TRUE TRUE TRUE TRUE FALSE FALSE
也就是说,a > 50
返回应用(逻辑)测试“大于50?”的结果。到向量a中的每个值。这是你经常在R中听到的“矢量化”。
请注意,在R中,您可以将布尔(逻辑)向量作为下标放到向量中。它只返回TRUE的元素:
a[a > 50]
[1] 90 56 88 85 96 61 58 60 66 87 82 63 74 51 62 86 69 54 77 92 81 64 83 91
当然,这些值可以输入sum
sum(a[a > 50])
[1] 1776
在某些时候,这将成为你的第二天性。我建议阅读John Cook的精彩博文:Five Kinds of Subscripts in R - 它将帮助您回答各种相关问题。