df<-data.frame(a=1:100)
sum(df$a>50)
[1] 50
我正在尋找的答案是51 + 52 ... 100的總和。我試着搜索,但只發現很差的問題/評分或導致Excel sumif。由於基於相對值的數值向量的總和(不計數個案)
df<-data.frame(a=1:100)
sum(df$a>50)
[1] 50
我正在尋找的答案是51 + 52 ... 100的總和。我試着搜索,但只發現很差的問題/評分或導致Excel sumif。由於基於相對值的數值向量的總和(不計數個案)
嘗試以下操作:
sum(subset(df,a>50))
Unsing條件中的「地址括號」沒有一個子集的作品。
sum(df[ df$a>50, ])
我認爲你的問題有幾件事情正在進行。我會盡量一次回答一個:
您創建了一個data.frame,但之後只將它用於該向量。讓我們試着只創建一個變量來回答你的問題:
a = 1:50
您創建的數據,其中每個變量(例如X [10])等於指數(例如10)的值。正如我們下面看到的,這會導致一些混亂,因爲有多種方式可以在R.指數因此,讓我們用這個:
set.seed(0)
a = sample(100, n=50)
在你的問題,你叫合計(> 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
在某些時候,這將成爲你的第二天性。我推薦閱讀約翰庫克的偉大博客文章:Five Kinds of Subscripts in R - 它會幫助你回答各種相關的問題。
'a> 50'返回一個邏輯,即是/否'TRUE' /'FALSE'。由於R是矢量化的,你可以得到一個邏輯矢量。 'TRUE'可以強制爲1,'FALSE'爲0,所以你的總和是'1 + 1 + ... + 1'= 50.你需要首先對矢量進行子集化('a [51:100] )然後總結。 – rawr