【发布时间】:2020-04-03 23:46:51
【问题描述】:
ID <- c("A","B","C","D","E")
AT <- c(0.1,0.2,0.3,0.4,0.5)
US <- c(NA,NA,0.6,NA,NA)
FIGX <- c(1,NA,NA,2,3)
W1 <- c(NA,10,20,30,40)
test.Data <- data.frame(ID,AT,US,FIGX,W1) %>% as.data.table()
我有这种桌子。 如果 NA,我想将 US 列的值替换为 FIGX 的值,如果 FIGX 为 NA,则替换为 W1 列的值。
我试过这个
test.Data %>% mutate_if(is.na(US),mutate_if(is.na(FIGX),W1))
没有成功。
我该怎么办?
【问题讨论】:
-
mutate(US = coalesce(US, FIGX, W1)) -
这能回答你的问题吗? How to implement coalesce efficiently in R
-
@camille 我会说这不是一个好的骗局 - 那是关于如何编写一个执行
coalesce的函数(并且早于dplyr实现多年)。这个问题是关于在 dplyr 中使用类似coalesce的函数,问题的根源似乎是mutate_if和ifelse之间的混淆。 -
@IRT,如果您在 mutate、
test.Data %>% mutate(ifelse(is.na(US), ifelse(is.na(FIGX), W1, FIGX), US))中使用ifelse,您的尝试会奏效,但coalesce是为像这样替换NAs 而设计的,并且更简洁。如果您想对满足条件的多个列执行完全相同的操作,请使用mutate_if- 例如,舍入所有数字列,或记录所有严格为正的数字列,或为所有日期列添加一周。 -
@Gregor 这很公平,尽管 dplyr 函数包含在至少一个答案中。我不认为
mutate_if问题是关键,因为无论如何它都不是正确使用该功能