计算符合条件的行数

时间:2015-01-28 15:24:51

标签: r

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

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

8 个答案:

答案 0 :(得分:32)

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"的计数。

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

    > which(mydata$sCode == "CA")
    [1] 1 2
    

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

答案 1 :(得分:9)

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

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

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

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

答案 2 :(得分:6)

  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',select = c(sCode)))

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

答案 3 :(得分:4)

只需尝试使用子集

nrow(subset(data,condition))

实施例

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

答案 4 :(得分:2)

使用dplyr包,使用

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

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

答案 5 :(得分:1)

可以使用grep命令

  

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

     

nrow(CA)

答案 6 :(得分:1)

要获取观察次数,数据集中的行数会更有效:

nrow(dat[dat$sCode == "CA",])

答案 7 :(得分:1)

调用nrow作为参数传递数据集的名称:

nrow(dataset)