[英]Count number of rows matching a criteria
我正在 R 中尋找一個與此 SQL 語句等效的命令。 我希望這是一個非常簡單的基本解決方案,而不使用復雜的函數或 dplyr 類型的包。
Select count(*) as number_of_states
from myTable
where sCode = "CA"
所以基本上我會計算與我的 where 條件匹配的行數。
我已經將一個 csv 文件作為數據框導入到 mydata 中。到目前為止,我已經嘗試了這些但無濟於事。
nrow(mydata$sCode == "CA") ## ==>> returns NULL
sum(mydata[mydata$sCode == 'CA',], na.rm=T) ## ==>> gives Error in FUN(X[[1L]], ...) : only defined on a data frame with all numeric variables
sum(subset(mydata, sCode='CA', select=c(sCode)), na.rm=T) ## ==>> FUN(X[[1L]], ...) : only defined on a data frame with all numeric variables
sum(mydata$sCode == "CA", na.rm=T) ## ==>> returns count of all rows in the entire data set, which is not the correct result.
以及上述樣本的一些變體。 任何幫助,將不勝感激! 謝謝。
mydata$sCode == "CA"
將返回一個布爾數組,在滿足條件的任何地方都有一個TRUE
值。 為了顯示:
> mydata = data.frame(sCode = c("CA", "CA", "AC"))
> mydata$sCode == "CA"
[1] TRUE TRUE FALSE
有幾種方法可以解決這個問題:
sum(mydata$sCode == "CA")
,如評論中所建議; 因為TRUE
被解釋為 1, FALSE
被解釋為 0,所以這應該返回向量中TRUE
值的數量。
length(which(mydata$sCode == "CA"))
; which()
函數返回滿足條件的索引向量,其長度是"CA"
的計數。
編輯以擴展 #2 中發生的事情:
> which(mydata$sCode == "CA")
[1] 1 2
which()
返回一個向量,標識滿足條件的每一列(在這種情況下,數據幀的第 1 列和第 2 列)。 這個向量的length()
是出現的次數。
sum
用於添加元素; nrow
用於計算矩形數組(通常是矩陣或 data.frame)中的行數; length
用於計算向量中元素的數量。 您需要正確應用這些功能。
假設您的數據是一個名為“dat”的數據框。 正確的解決方法:
nrow(dat[dat$sCode == "CA",])
length(dat$sCode[dat$sCode == "CA"])
sum(dat$sCode == "CA")
mydata$sCode
是一個向量,這就是 nrow 輸出為 NULL 的原因。mydata[mydata$sCode == 'CA',]
返回data.frame
其中sCode == 'CA'
。 sCode 包含字符。 這就是sum
給你錯誤的原因。 subset(mydata, sCode='CA', select=c(sCode))
,你應該使用sCode=='CA'
而不是sCode='CA'
。 然后子集返回您的向量,其中 sCode 等於 CA,因此您應該使用
長度(子集(na.omit(mydata),sCode='CA',選擇=c(sCode)))
或者你可以試試這個: sum(na.omit(mydata$sCode) == "CA")
嘗試使用子集
nrow(subset(data,condition))
例子
nrow(subset(myData,sCode == "CA"))
使用dplyr
包,使用
nrow(filter(mydata, sCode == "CA")),
此處提供的所有解決方案都給了我與 multi-sam 相同的錯誤,但該錯誤有效。
要獲得觀察數,您的數據集中的行數會更有效:
nrow(dat[dat$sCode == "CA",])
可以使用 grep 命令
CA = mydata[grep("CA", mydata$sCode, ]
行(CA)
調用nrow
作為參數傳遞數據集的名稱:
nrow(dataset)
我正在使用這個簡短的函數來dplyr
使用:
countc <- function(.data, ..., preserve = FALSE){
return(nrow(filter(.data, ..., .preserve = preserve)))
}
有了這個,你可以像filter
一樣使用它。 例如:
countc(data, active == TRUE)
[1] 42
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.