r - 变量值随“ifelse”变化
问题描述
我想将变量“月”更改为新变量“季节”。我尝试了以下两种方法,但似乎我的代码中有一些错误。
train_fd<-train_fd %>% mutate(season = ifelse(month <= 2 & month == 12,"winter",
ifelse(month <= 5 & month > 3,"spring",
ifelse(month <= 9 & month > 6,"summer","fall"))))
train_fd <- within(train_fd,
{
season = character(0)
season[month <= 2 & month == 12] = "winter"
season[month <= 5 & month >= 3] = "spring"
season[month <= 9 & month >= 6] = "summer"
season[month == 10 & month == 11] = "fall"
season = factor(season, level = c("winter","spring","summer","fall"))
})
我希望 level 的输出是c("winter","spring","summer","fall")
,但实际输出是 level
c("winter", "fall")
解决方案
坦率地说,我会为自己省去很多麻烦做一个明确的字典:
m2s <- c( rep("winter", 2),
rep("spring", 3),
rep("summer", 4),
rep("fall", 2), "winter)
现在你可以简单地
train_fd$season <- m2s[ train_fd$month ]
请注意第一种方法中的问题:
month <= 2 & month == 12
总是返回FALSE
,因为你使用&
而不是|
; 因此一月、二月和十二月都变成了“秋天”;month <= 5 & month > 3
如果month == 3
?然后三月是秋天...month <= 9 & month > 6
再一次,六月变成了秋天。
您的第二种方法复制了其中一些错误(例如&
冬季)并添加新错误(例如 condition month == 10 & month == 11
,它总是返回FALSE
)。但是,我一点也不知道如何winter
在任何方法中获得输出级别:这是不可能的。
底线是:多层条件句容易出现拼写错误。
推荐阅读
- excel - 将特定工作表从工作簿复制到另一个工作簿
- intellij-idea - 如何将 IntelliJ 与离线存储库一起使用?
- apache-spark - SPARK:何时删除 Dataframe 或 RDD 或直到它还活着,不涉及缓存。给定:对一些后续的 RDD/DF 调用操作
- r - R gt 包 - 背景着色单个单元格,当它等于某个值时
- javascript - 如何停止页面在验证表单上刷新
- android - 在 Android Studio 中 Ping 本地 IP
- ios - ios 13 中未调用 application(...continue userActivity...) 方法
- apify - 内存计数的差异以及计算单元的计数
- php - 使用maatwebsite在laravel中导出带有动态数组的excel
- postgresql - 将数据加载到 PostgreSQL 时出现“对等身份验证失败”错误