将连续数转换为二进制值

时间:2018-03-14 21:25:12

标签: r

我有一个数据集,其中包含一个名为BirthYear的列,其中包含人们出生的许多年,我需要创建一个新列,用于打印" young"如果他们的BirthYear是> 1993年并打印#34; old"如果他们的BirthYear是< 1993.我尝试过使用if功能,但我似乎无法实现它,如果你让我知道怎么做,我将不胜感激,谢谢!

2 个答案:

答案 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