基于多个条件的新列 - 不要替换ifelse

时间:2017-04-27 15:25:36

标签: r if-statement

我想在data.frame中创建一个新列:mad$season,其中包含条件类别:

mad$season <- ifelse(mad$dayofyear <81, "winter", "")
mad$season <- ifelse((mad$dayofyear>=80) & (mad$dayofyear<=108), "spring", "")
mad$season <- ifelse(mad$dayofyear >108, "summer", "")

与此示例相似:R: Add multiple new columns based on multiple conditions

但是,每行代码都替换了第一行代码 - 而NULL似乎不起作用。

有什么建议吗?

此问题与Replacing numbers within a range with a factor不同,因为我想添加一个新列,而不是用一个因子替换该数字。

2 个答案:

答案 0 :(得分:0)

我们可以使用cut来执行此操作,而无需多个ifelse语句。只需指定breakslabels即可创建“季节”&#39;柱

mad$season <- with(mad, cut(dayofyear, breaks = c(-Inf, 80, 108, Inf),
         labels = c("winter", "spring", "summer")))

答案 1 :(得分:0)

只是为了你知道什么是错的,为了使用多个ifelse语句按你的意愿去做,你必须嵌套它们。

mad$season <- ifelse(mad$dayofyear <81, "winter", 
                     ifelse((mad$dayofyear>=80) & (mad$dayofyear<=108), "spring", 
                            ifelse(mad$dayofyear >108, "summer", "")))

这样,每当ifelse找到FALSE时,它就会移动到下一个可用的ifelse。否则你确实在重写对象。

正如akrun评论的那样,cut是更聪明的方法。

希望这有帮助。