SQL如何计数符合条件的行数?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (157)

我在R中寻找一个命令,它相当于这个SQL语句。我希望这是一个非常简单的基本解决方案,而不使用复杂函数或dplyr类型的包。

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

因此,基本上,我将计数符合WHERE条件的行数。

我已经将CSV文件作为数据框架导入到我的数据中,所以我已经尝试了这些,但没有结果。

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.

提问于
用户回答回答于

sum用于添加元素;nrow用于计算矩形数组中的行数(通常是矩阵或data.framework);length用于计算向量中的元素数。您需要正确地应用这些函数。

正确的方法:

nrow(dat[dat$sCode == "CA",])
length(dat$sCode[dat$sCode == "CA"])
sum(which(dat$sCode == "CA"))
用户回答回答于

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

扫码关注云+社区

领取腾讯云代金券