首页 > 解决方案 > 条件帮助 ifelse 语句

问题描述

对于数据集,我们有以下分段相等:

tenure_new == tenure iftenure <= exper 
tenure_new == exper iftenure> exper

所以我写的代码是:

tenure_new <- ifelse(wage2$tenure <= wage2$exper,wage2$tenure, wage2$exper)

我们想得到平均值,但我们得到的答案没有被接受——不知道还能做什么。

我不想要答案,只是一些关于我可能忽略的方向。

这是问题的问题:

问题问题

标签: rpiecewise

解决方案


有多种方法可以做到这一点。但为了简单起见,我将展示基于 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

推荐阅读