首页 > 解决方案 > 根据数据框或向量中的值执行 if then 语句

问题描述

例如,假设我有以下数据:

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

我想创建一个新向量,data2使用. 我可以通过一次执行大量 if 语句来手动执行此操作:nummonthkeycase_when

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"). 我怎样才能做到这一点?

标签: rif-statementlogic

解决方案


您可以使用match和基础 R 索引(另外,在初始化 data.frame 时设置 stringsAsFactors=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"

推荐阅读