r - 条件帮助 ifelse 语句
问题描述
对于数据集,我们有以下分段相等:
tenure_new == tenure iftenure <= exper
tenure_new == exper iftenure> exper
所以我写的代码是:
tenure_new <- ifelse(wage2$tenure <= wage2$exper,wage2$tenure, wage2$exper)
我们想得到平均值,但我们得到的答案没有被接受——不知道还能做什么。
我不想要答案,只是一些关于我可能忽略的方向。
这是问题的问题:
解决方案
有多种方法可以做到这一点。但为了简单起见,我将展示基于 R 的传统for
循环方法,基于 R 的mapply
方法,并分享该tidyverse
方法。
基本 R 方法 - 使用for
循环
library(wooldridge)
data(wage2)
# Traditional solution
# Make new variable
wage2$tenure_new<- NA
for(i in 1:length(wage2$tenure)){
if(wage2$tenure[i]<= wage2$exper[i]){
wage2$tenure_new[i]<- wage2$tenure[i]
}else{
wage2$tenure_new[i]<- wage2$exper[i]
}
}
# mean of tenure_new
round(mean(wage2$tenure_new),2)
# Output> [1] 6.51
Base R 方法 - 使用mapply
非常少量的代码,但如果您不太了解 R,则很难阅读。
round(mean(mapply(function(x,y) if(x<=y){x}else{y},x=wage2$tenure,y=wage2$exper)),2)
tidyverse
方法
(实际上你可以dplyr
单独使用包,但我个人喜欢tidyverse
完整加载。)
library(tidyverse)
wage2 %>%
transmute(tenure_new=ifelse(tenure<=exper,tenure,exper)) %>%
colMeans() %>%
round(2)
# Output> tenure_new
# 6.51
推荐阅读
- sql-server - 使用 SQL Server 中另一个表中的一列创建唯一键
- pagination - 如何在 PowerQuery/PowerBI 的 API 请求中迭代/循环访问下一页?
- python - 将文件上传到 MS Teams 聊天
- java - 为什么我在 SpringBean 的构造函数中初始化的字段为 null?
- python - 在 python http.client.HTTPSConnection 中设置更新的 ssl 版本
- oracle - ORA-06502 而 dbms_sql.execute(
) 外绑定 - javascript - React中发生下拉组件onChange选择时如何清除自动完成文本框组件
- sql - 如何从 SQL 中的 XML 元素返回多个值?
- cypress - 将一个日期值与其他日期进行比较并在 cypress 中执行条件操作
- applescript - 使用 Applescript 在 Things 3 中复制项目