然后根据数据框或向量中的值声明

时间:2019-06-03 23:32:29

标签: r if-statement logic

作为一个例子,假设我有以下数据:

key <- data.frame(num=c(1,2,3,4,5), month=c("January", "Feb", "March", "Apr", "May"))
data <- c(4,2,5,3)

我想使用data2num中包含的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")。我该怎么办?

1 个答案:

答案 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"