首页 文章

计算符合条件的行数

提问于
浏览
28

我在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.

以及上述样本的一些变化 . 任何帮助,将不胜感激!谢谢 .

6 回答

  • 3

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

    如果使用sum和R结构,所有解决方案都会显示出根本的误解 .

    假设您的数据是名为“dat”的数据框 . 正确的解决方案:

    nrow(dat[dat$sCode == "CA",])
    length(dat$sCode[dat$sCode == "CA"])
    sum(which(dat$sCode == "CA"))
    
  • 9

    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() 是出现的次数 .

  • 6
    • 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,所以你应该使用

    length(子集(na.omit(mydata),sCode ='CA',select = c(sCode)))

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

  • 2

    只需尝试使用子集

    nrow(subset(data,condition))
    

    nrow(subset(myData,sCode == "CA"))
    
  • 32

    使用 dplyr 包,使用

    nrow(filter(mydata, sCode == "CA")),
    

    这里提供的所有解决方案都给我带来了与多山姆相同的错误,但是那个有效 .

  • 1

    可以使用grep命令

    CA = mydata [grep(“CA”,mydata $ sCode,] nrow(CA)

相关问题