df<-data.frame(a=1:100)
sum(df$a>50)
[1] 50
我要找的答案是51+52…100的总和。我尝试过搜索,但只找到了糟糕的问题/评分或Excel sumif的线索。感谢
尝试以下操作:
sum(subset(df,a>50))
我认为你的问题有一些问题。我试着一次回答一个:
您创建了一个data.frame,但随后仅将其用于向量。让我们试着只创建一个变量来回答您的问题:
a = 1:50
您创建的数据中,每个变量(例如x[10])都等于索引的值(例如10)。正如我们将在下面看到的,这可能会导致一些混乱,因为在R中有多种索引方法。所以让我们使用这个:
set.seed(0)
a = sample(100, n=50)
在你的问题中,你称sum(a>50)。首先,你应该试着了解一个>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
在某个时刻,这将成为你的第二天性。我推荐阅读约翰·库克的伟大博客文章:R中的五种下标——它将帮助你能够回答各种相关的问题。
取消"地址括号"中的条件在没有子集的情况下有效。
sum( df[ df$a>50, ])