以下是数据框:
Sex year
M 2.2
M 2.3
F 2.7
F 3.1
M 4.1
F 3.6
我必须用
计算一个新的变量类别年> 3.2 = category_a
2.5<年< 3.2 = category_b
年小于或等于2.5 = category_c
MY ATTEMPT:
age <- read.table("data.txt",header=TRUE)
category <- c(1,1,1,1,1,1)
for(i in 1:6){
if(subset(age,year[i]<3.2)){
category[i]="category_a"
} else if (subset(age,2.5<year[i]<3.2)){
category[i]="category_b"
} else (subset(age,year[i]<2.5)){
category[i]="category_c"
}
} # end for loop
但这不起作用
答案 0 :(得分:2)
基于@Ananda的建议:
cut(age$year, c(-Inf,2.5,3.2,Inf), labels=c("category_c","category_b","category_a"))
答案 1 :(得分:1)
根据OP的要求:
使用ifelse
(未经测试)的解决方案
假设您的数据为sample
:
data$age <- with(data, ifelse(year<2.5,"category_c",
ifelse((year>2.5 & year<3.2),"category_b",
ifelse(year>3.2,"category_a",NA)), NA))
建议:如果您有大类别,请不要使用ifelse
。而是使用cut
作为@Thomas的答案。
注意:NA
为年份分配,值为2.5和3.2,因为您假设开放时间间隔。