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

时间:2015-05-31 02:29:55

标签: r data-manipulation

因此,col和prob可以被认为是一个包;他们一起去,例如,col2“与”问题2一起。

如何才能使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>

3 个答案:

答案 0 :(得分:2)

您可以使用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> - 包含”列作为因子列进入。你的?col?变量可能有问题,因为带有NA的真数字向量不会显示为<NA>

答案 1 :(得分:1)

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

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

答案 2 :(得分:1)

基于上一个答案,这里有一种方法可以在所有列 - 探测对中以编程方式执行此操作:

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])
}

产生的int:

  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