【发布时间】:2020-09-03 04:01:41
【问题描述】:
我一辈子都想不出一种方法来让这个工作不改变列的类或获得一个甚至不在原始列中的随机级别!
我的数据如下所示:
data <- structure(list(WHY = structure(1:4, .Label = c("WHY1", "WHY2",
"WHY3", "WHY4"), class = "factor"), HELP1 = structure(c(3L, NA,
1L, 2L), .Label = c("1", "2", "D/A"), class = "factor"), HELP2 = c(NA,
2L, NA, NA)), class = "data.frame", row.names = c(NA, -4L))
我想做什么: 如果 HELP 2 不是 NA 并且如果 HELP1 是 D/A 则合并列而不更改类。
这是我尝试过的:
data$HELP3 <-
ifelse(
!is.na(data$HELP2) &
data$HELP1 == "D/A",
data$HELP1, data$HELP2)
结果:
data
WHY HELP1 HELP2 HELP3
1 WHY1 D/A NA NA
2 WHY2 <NA> 2 NA
3 WHY3 1 NA NA
4 WHY4 2 NA NA
>
如果能提供任何帮助,我将不胜感激。我已经在堆栈溢出上 5 个小时了,而且还没有完成这项工作:(我对 dyplr 不是很热,所以一个 base r 或其他任何东西都会很棒!
【问题讨论】:
-
在本例中,您的预期输出将是
HELP3列与HELP1相同? -
嗨 @RonakShah 是的,理想情况下我只有 HELP 1,如果它是 NA,那么我会从 HELP 2 中提取值(如果有的话)。我刚刚更新,因为我将 if else 语句的最后一点放在了前面。
-
如果你想这样做 如果帮助 1 中存在值,则从帮助 1 中获取值,否则你可以使用
dplyr::coalesce(data$HELP1, data$HELP2)但这不考虑data$HELP1 == "D/A"。