首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >计算符合条件的行数

计算符合条件的行数
EN

Stack Overflow用户
提问于 2015-01-28 23:24:51
回答 9查看 277.9K关注 0票数 48

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

代码语言:javascript
复制
Select count(*) as number_of_states 
  from myTable
where  sCode = "CA"

因此,从本质上讲,我将计算与where条件匹配的行数。

我已经将一个csv文件作为数据frame.So导入到我的数据中,我已经尝试了这些方法,但都没有用。

  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.

以及上述样本的一些变体。任何帮助都将不胜感激!谢谢。

EN

回答 9

Stack Overflow用户

发布于 2015-01-28 23:40:17

mydata$sCode == "CA"将返回一个布尔数组,只要满足条件,就会返回一个TRUE值。举例说明:

代码语言:javascript
复制
> mydata = data.frame(sCode = c("CA", "CA", "AC"))
> mydata$sCode == "CA"
[1]  TRUE  TRUE FALSE

有几种方法可以解决这个问题:

注释中建议的

  1. sum(mydata$sCode == "CA"),;由于vector.
  2. length(which(mydata$sCode == "CA"));中将TRUE解释为1,而将FALSE解释为0,因此应返回TRUE值的个数。which()函数返回满足条件的索引的向量,其长度是count的计数

编辑以扩展#2中发生的事情:

代码语言:javascript
复制
> which(mydata$sCode == "CA")
[1] 1 2

which()返回一个向量,标识满足条件的每一列(在本例中是数据帧的第1列和第2列)。此向量的length()是出现的次数。

票数 47
EN

Stack Overflow用户

发布于 2015-01-28 23:37:15

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

让我们假设您的数据是一个名为"dat“的数据框。正确的解决方案:

代码语言:javascript
复制
nrow(dat[dat$sCode == "CA",])
length(dat$sCode[dat$sCode == "CA"])
sum(dat$sCode == "CA")
票数 21
EN

Stack Overflow用户

发布于 2015-01-28 23:30:47

  1. mydata$sCode是一个向量,这就是为什么nrow输出是NULL.
  2. mydata[mydata$sCode == 'CA',]返回data.frame,其中sCode == 'CA'。sCode包含字符。这就是为什么sum提供了你应该使用sCode=='CA'而不是sCode='CA'的error.
  3. subset(mydata, sCode='CA', select=c(sCode)),。然后subset返回向量,其中sCode等于CA,所以您应该使用

长度(子集(na.omit(Mydata),sCode='CA',select=c(SCode)

或者你可以试试这个:sum(na.omit(mydata$sCode) == "CA")

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28195996

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档