基于相对值的数值向量的总和(不计数情况)

时间:2014-02-22 03:22:13

标签: r sum conditional-statements

df<-data.frame(a=1:100)
sum(df$a>50)
[1] 50

我要找的答案是51 + 52 ...... 100的总和。我尝试搜索,但只找到不好的问题/评级或导致Excel sumif。感谢

3 个答案:

答案 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 - 它将帮助您回答各种相关问题。