有条件地将一列替换为另一列 ( R )

Conditional replacement of one column by another ( R )

因此,可以将 col 和 prob 视为一个包;他们一起去,例如,col2 "goes with" prob2.

如何才能让col中的单元格为<NA>时,对应的prob也会被替换为<NA>

数据:

   col2          prob2    col3            prob3     col4            prob4    col5              prob5
    2  0.126269620610401  <NA>  0.979143074247986   <NA>  0.150689669651911  <NA>   0.11148908524774
    3  0.730431054253131  <NA>  0.826114872703329   <NA>  0.368350319797173  <NA>   0.299717969959602
    2  0.320544729940593    3   0.0434977798722684   4    0.859434255165979   11    0.150506388396025
    2  0.0354198240675032   3   0.240764779038727    5    0.276169682852924  <NA>   0.0449998050462455

目标:

   col2          prob2    col3         prob3        col4            prob4      col5          prob5
    2  0.126269620610401  <NA>          <NA>        <NA>   0.150689669651911   <NA>           <NA>
    3  0.730431054253131  <NA>          <NA>        <NA>   0.368350319797173   <NA>           <NA>
    2  0.320544729940593    3   0.0434977798722684    4    0.859434255165979    11     0.150506388396025 
    2  0.0354198240675032   3   0.240764779038727     5    0.276169682852924   <NA>           <NA>

如果同一行中的 col3 值为 NA,这将用 NA 替换 prob3 值:

dat$prob3 = ifelse(is.na(dat$col3), NA, dat$prob3))

在之前的答案的基础上,这是一种在所有列-概率对中以编程方式执行此操作的方法:

x <- data.frame(col2 = c(NA, NA, 1,2), prob2 = runif(4), col3 = c(3,4,NA,NA), prob3 = rnorm(4))

colColumns <- grep("col", names(x))

for (j in colColumns) {
  x[ j+1] <- ifelse(is.na(x[, j]), NA, x[, j+1])
}

结果整数:

  col2     prob2 col3    prob3
1   NA        NA    3 1.359170
2   NA        NA    4 1.165798
3    1 0.2701173   NA       NA
4    2 0.6411366   NA       NA

您可以使用 is.na.data.frame 创建一个结果,该结果被 is.na<- 用于 "NA-out" "prob" 列中的相应值:

 is.na(dat[ , grep("prob", colnames(dat)) ]) <- is.na(dat[ , grep("col", colnames(dat)) ])

 #------------------
> dat
  col2      prob2 col3      prob3 col4     prob4 col5     prob5
1    2 0.12626962 <NA>         NA <NA>        NA <NA>        NA
2    3 0.73043105 <NA>         NA <NA>        NA <NA>        NA
3    2 0.32054473    3 0.04349778    4 0.8594343   11 0.1505064
4    2 0.03541982    3 0.24076478    5 0.2761697 <NA>        NA

请注意,这使用了您的控制台输出,并且它作为任何“<NA>-containing”列作为因子列出现。这可能是您的 ?col? 变量的问题,因为带有 NA 的真实数字向量不会显示为 <NA>