作为一个例子,假设我有以下数据:
key <- data.frame(num=c(1,2,3,4,5), month=c("January", "Feb", "March", "Apr", "May"))
data <- c(4,2,5,3)
我想使用data2
到num
中包含的month
的映射来创建新的向量key
。我可以使用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")
。我该怎么办?
答案 0 :(得分:1)
您可以使用match
和基R索引(也可以在初始化data.frame时设置stringAsFactors = FALSE,如下所示):
key <- data.frame(num=c(1,2,3,4,5), month=c("January", "Feb", "March", "Apr", "May"), stringsAsFactors = FALSE)
data2 <- key$month[match(data, key$num)]
data2
#[1] "Apr" "Feb" "May" "March"