簡體   English   中英

計算符合條件的行數

[英]Count number of rows matching a criteria

我正在 R 中尋找一個與此 SQL 語句等效的命令。 我希望這是一個非常簡單的基本解決方案,而不使用復雜的函數或 dplyr 類型的包。

Select count(*) as number_of_states 
  from myTable
where  sCode = "CA"

所以基本上我會計算與我的 where 條件匹配的行數。

我已經將一個 csv 文件作為數據框導入到 mydata 中。到目前為止,我已經嘗試了這些但無濟於事。

  1. nrow(mydata$sCode == "CA") ## ==>> returns NULL

  2. sum(mydata[mydata$sCode == 'CA',], na.rm=T) ## ==>> gives Error in FUN(X[[1L]], ...) : only defined on a data frame with all numeric variables

  3. sum(subset(mydata, sCode='CA', select=c(sCode)), na.rm=T) ## ==>> FUN(X[[1L]], ...) : only defined on a data frame with all numeric variables

  4. 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

有幾種方法可以解決這個問題:

  1. sum(mydata$sCode == "CA") ,如評論中所建議; 因為TRUE被解釋為 1, FALSE被解釋為 0,所以這應該返回向量中TRUE值的數量。

  2. 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")
  1. mydata$sCode是一個向量,這就是 nrow 輸出為 NULL 的原因。
  2. mydata[mydata$sCode == 'CA',]返回data.frame其中sCode == 'CA' sCode 包含字符。 這就是sum給你錯誤的原因。
  3. 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM