繁体   English   中英

替换列条件 dplyr

[英]Replace column condition dplyr

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,我想用 FIGX 的值替换 US 列的值,如果 FIGX 是 NA,则用 W1 列值替换。

我试过这个test.Data %>% mutate_if(is.na(US),mutate_if(is.na(FIGX),W1))没有成功。 我应该怎么做?

这是一个带有daa.table的选项,因为输入数据已经是一个data.table

library(data.table)
library(dplyr)
test.Data[is.na(US), US := coalesce(FIGX, W1)][]
test.Data
#   ID  AT   US FIGX W1
#1:  A 0.1  1.0    1 NA
#2:  B 0.2 10.0   NA 10
#3:  C 0.3  0.6   NA 20
#4:  D 0.4  2.0    2 30
#5:  E 0.5  3.0    3 40

对于多列,我们可以使用set

colsOfInterest <- c("US", "AT")
for(nm in colsOfInterest){
   i1 <- which(is.na(test.Data[[nm]]))
   set(test.Data, i = i1 ,
         j = nm, value = coalesce(test.Data[["FIGX"]][i1], test.Data[["W1"]][i1]))
  }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM