我在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 回答
sum
用于添加元素;nrow
用于计算矩形数组中的行数(通常是矩阵或data.frame);length
用于计算向量中的元素数 . 您需要正确应用这些功能 .如果使用sum和R结构,所有解决方案都会显示出根本的误解 .
假设您的数据是名为“dat”的数据框 . 正确的解决方案:
mydata$sCode == "CA"
将返回一个布尔数组,其值满足条件的TRUE
值 . 为了显示:有几种方法可以解决这个问题:
sum(mydata$sCode == "CA")
,如评论中所建议的那样;因为TRUE
被解释为1而FALSE
被解释为0,所以这应该在向量中返回TRUE
值的数字 .length(which(mydata$sCode == "CA"))
;which()
函数返回满足条件的索引向量,其长度为"CA"
的计数 .编辑以扩展#2中发生的事情:
which()
返回一个向量标识符合条件的每一列(在本例中为数据帧的第1列和第2列) . 此向量的length()
是出现的次数 .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")
只需尝试使用子集
例
使用
dplyr
包,使用这里提供的所有解决方案都给我带来了与多山姆相同的错误,但是那个有效 .
可以使用grep命令