r - 根据数据框或向量中的值执行 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 语句来手动执行此操作:num
month
key
case_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")
. 我怎样才能做到这一点?
解决方案
您可以使用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"
推荐阅读
- sql - sql sum over with where 条件
- dart - 我可以使用没有构造函数的类吗?
- docker - docker --cache-from 是否应该导致下载多个 sha-hashes?
- powershell - Powershell Import-Csv Getting data
- python - 如何在 python 代码中访问 terraform 变量?
- pandas - 将参数添加到应用的数据框函数
- css - CSS - 如何使移动过渡动画响应?
- laravel - 使用反射将服务注入 Laravel 8 上的服务
- flutter - Flutter SingleChildScrollView 在 ListView 上不起作用
- sql - 将 varchar 数据类型转换为 datetime 数据类型导致值超出范围。错误