【发布时间】:2019-06-03 23:32:29
【问题描述】:
举个例子,假设我有这个数据:
key <- data.frame(num=c(1,2,3,4,5), month=c("January", "Feb", "March", "Apr", "May"))
data <- c(4,2,5,3)
我想使用 key 中包含的 num 到 month 的映射创建一个新向量 data2。我可以使用case_when 手动执行此操作,一次执行大量 if 语句:
library(dplyr)
data2<-case_when(
data==1 ~ "January",
data==2 ~ "Feb",
data==3 ~ "March",
data==4 ~ "Apr",
data==5 ~ "May"
)
但是,假设我想自动化这个过程(也许我实际上有数千个 if 语句)并利用 key 中包含的映射。这或类似的东西,可能吗?
这是一次失败的代码尝试:
data2 <- case_when(data=key$num ~ key$month)
我要的是一个名为data2 的向量,其中包含以下元素:c("Apr","Feb","May","March")。我该怎么做?
【问题讨论】:
-
我确信有一种方法可以使用
case_when来实现,但这可以通过子集来完成 - 例如key$month[match(data, key$num)]。 -
data2 <- data.frame(num = data) %>% left_join(key) %>% pull(month)。 (你可能想用stringsAsFactors = F加载key) -
理想情况下,它会使用
case_when,这样我就可以用一个函数来做到这一点。我问的真正原因与这个问题有关:stackoverflow.com/questions/56411936/… 请参阅我对答案的评论。希望这些答案之一可以适用于那里。
标签: r if-statement logic