在R中基于多列统计符合条件的行数及报错解决
R语言统计符合条件行数的解决方法
错误原因
你的代码报错是因为filter()是dplyr包中用于筛选数据框行的函数,不能直接接收逻辑向量作为输入。你传入的df$AgeGroup=="36-45 AgeGroup" & df$SocioEcnomicStatus =="2"是一个逻辑向量,不符合filter()的参数要求。
无需更改数据类型的解决方法
基础R方案(无需额外包)
直接对逻辑向量求和(TRUE会被自动转换为1,FALSE为0),这是最简洁的方式:
sum(df$AgeGroup == "36-45 AgeGroup" & df$SocioEcnomicStatus == "2")
也可以用subset()筛选后统计行数:
nrow(subset(df, AgeGroup == "36-45 AgeGroup" & SocioEcnomicStatus == "2"))
dplyr包正确用法
如果想用dplyr的filter(),需要先传入数据框,再链式调用统计行数:
library(dplyr) # 筛选后统计行数 df %>% filter(AgeGroup == "36-45 AgeGroup", SocioEcnomicStatus == "2") %>% nrow() # 或者直接用tally统计符合条件的行 df %>% filter(AgeGroup == "36-45 AgeGroup", SocioEcnomicStatus == "2") %>% tally()
更改数据类型的代码(若需要)
如果想把字符型的SocioEcnomicStatus转为数值型,可以用以下方法:
转换单列
df$SocioEcnomicStatus <- as.numeric(df$SocioEcnomicStatus)
批量转换所有适合的列
如果数据框中有多列需要转换,用type.convert()自动识别转换:
df <- type.convert(df, as.is = TRUE)
转换后,条件可以改为SocioEcnomicStatus == 2(去掉引号),统计代码只需修改条件即可,比如:
sum(df$AgeGroup == "36-45 AgeGroup" & df$SocioEcnomicStatus == 2)
内容的提问来源于stack exchange,提问作者Usman YousafZai
相关产品推荐
相关产品推荐

