r-基于相对值的数值向量的和(不计算大小写)


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, ])

最新更新