我想在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不同,因为我想添加一个新列,而不是用一个因子替换该数字。
答案 0 :(得分:0)
我们可以使用cut
来执行此操作,而无需多个ifelse
语句。只需指定breaks
和labels
即可创建“季节”&#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
是更聪明的方法。
希望这有帮助。