使用ifelse删除变量R

我正在尝试将创建的男性和女性专栏合并为一栏。我尝试使用在堆栈中找到的一些答案,但排除了我查询的第二性行为。

构建数据框:

ID <- 1:10
SPAYDT <- c("","2011-12-01","","2006-05-01","")
SPAYDTU <- c(1,NA,NA)
NEUTDT <- c("","2013-03-01","")
NEUTDTU <- c(NA,1,NA)
df <- as.data.frame(cbind(ID,SPAYDT,SPAYDTU,NEUTDT,NEUTDTU))
df

目标是创建一个性别列,其格式设置为2级因子-男性和女性 如果SPAYDT或SPAYDTU中有值,则应为女性;如果NEUTDT或NEUTDTU中具有值,则应为男性。 我尝试过的:

  • 使用嵌套的if-else语句构建一个性别列
  • 制作两列,然后使用组合
df$male <- ifelse(NEUTDT!="","Male",ifelse(NEUTDTU=1,NA))
df$female <- ifelse(SPAYDT!="","Female",ifelse(SPAYDTU==1,NA))
df$sex <- ifelse(!is.na(df$female),df$female,df$male)

df$sex <- ifelse(SPAYDT!="",ifelse(NEUTDT!="",NA))))

但是,无论我做什么,最后的性别列都只有一种性别。我确保已附加我的df,以将列名用作变量。我尝试重新启动R并再次运行安装代码。我只是不知道为什么ifelse语句会忽略第二性行为输入。

非常感谢您的帮助!

说明: 在更大的数据框中,我正在完成数据清理,因此每个ID仅对应1个性别。抱歉代码中的错误。

所需的输出:

ID <- 1:10
SPAYDT <- c("",NA)
SEX <- c("Female",NEUTDTU,SEX))
df
xiakaipkq 回答:使用ifelse删除变量R

这是您的追求吗?

ID <- 1:10
SPAYDT <- c("","2011-12-01","","2006-05-01","")
SPAYDTU <- c(1,NA,NA)
NEUTDT <- c("","2013-03-01","")
NEUTDTU <- c(NA,1,NA)
df <- data.frame(ID,SPAYDT,SPAYDTU,NEUTDT,NEUTDTU)

df %>% 
 mutate(
   sex = case_when(
      NEUTDT!="" | NEUTDTU==1 ~ "Male",SPAYDT!="" | SPAYDTU==1 ~ "Female",TRUE ~ NA_character_))
本文链接:https://www.f2er.com/3163000.html

大家都在问