我有一个数据集,其中包含一个名为BirthYear的列,其中包含人们出生的许多年,我需要创建一个新列,用于打印" young"如果他们的BirthYear是> 1993年并打印#34; old"如果他们的BirthYear是< 1993.我尝试过使用if功能,但我似乎无法实现它,如果你让我知道怎么做,我将不胜感激,谢谢!
答案 0 :(得分:2)
我也非常喜欢cut()
,特别是如果您希望结果为factor。
year <- sample(1989:1999, size=20, replace=T) # Arbitrary vector of years
breaks <- c(-Inf, 1993, Inf) # The 3 bounds of the 2 intervals
labels <- c("old", "young") # The 2 labels of the 2 intervals
binary <- cut(x=year, breaks=breaks, labels=labels, right=F)
# Inspect
data.frame(year, binary)
结果:
year binary
1 1993 young
2 1997 young
3 1989 old
4 1998 young
5 1999 young
6 1989 old
7 1994 young
8 1991 old
9 1991 old
10 1991 old
...
这接近duplicate,但涉及自定义标签。
如果您最终必须检查多个变量,请查看dplyr::case_when()
。
答案 1 :(得分:1)
另一个选项可能是使用dplyr::recode_factor
,如下所示:
set.seed(1)
year <- sample(1970:2005, size=10, replace=T)
> year
#[1] 2001 1975 1979 1994 1974 1973 1985 1994 1975 1981
recode_factor(as.factor(year > 1993), 'TRUE' = "Old", 'FALSE' = "Young")
#[1] Old Young Young Old Young Young Young Old Young Young
#Levels: Old Young