我有一个人口年龄的文件,并希望分组年龄范围(例如,10岁以下,35-44岁等)。
虽然使用grep可以正常使用两位数的年龄范围:
X_35_44 <- X[ grep("35|36|37|38|39|40|41|42|43|44", X$Age) , ]
当尝试为10岁以下的任何事物进行子集时,例如:
X_10under <- X[ grep("0|1|2|3|4|5|6|7|8|9|10|", X$Age) , ]
我退回任何年龄,其中1(或31)或2或3,而不是10岁以下的数字。
我如何确保不会发生这种情况?
非常感谢任何帮助!
提前致谢
答案 0 :(得分:1)
使用不接受失败代码的原则,而是提供更有效的编码解决方案,我将不同意正则表达式策略,建议您改为使用cut
或findInterval
。
X <- data.frame(Ages = sample(1:85, 300, repl=TRUE))
X$age_cat <- cut(X$Age, c(0, 10, 45, 60, 75, Inf), labels=c("under10",
'10-44','45-59','60-74','75+'), right=FALSE, include.lowest=TRUE)
head(X)
#=========
Ages age_cat
1 65 60-74
2 34 10-44
3 19 10-44
4 79 75+
5 5 under10
6 51 45-59
答案 1 :(得分:1)
的解决方案
ifelse()
as.integer(df$age)
df$age_cat <- ifelse(df$age < 10, "age_0-10", ifelse(10 < df$age < 20, "age_10-20", "age_20-"))
选择你自己的范围......