R 根据数据框中某列中的条件,删除同一行其他列中的数据

R 根据数据框中某列中的条件,删除同一行其他列中的数据,r,R,我想知道当trt=C时,如何从一行中的所有其他列中删除所有数据。我对一个适用于许多列的解决方案感兴趣 A <- sample(1:100,9) B <- sample(1:100,9) trt <- rep(c("A", "B", "C"),3) df <- data.frame(trt, A, B) df trt A B 1 A 32 43 2 B 29 79 3 C 94 95 4 A 100 24 5 B 63 38 6

我想知道当trt=C时,如何从一行中的所有其他列中删除所有数据。我对一个适用于许多列的解决方案感兴趣

A <- sample(1:100,9)
B <- sample(1:100,9)
trt <- rep(c("A", "B", "C"),3) 

df <- data.frame(trt, A, B)
df

    trt A  B
1   A  32 43
2   B  29 79
3   C  94 95
4   A 100 24
5   B  63 38
6   C  80 92
7   A  22 98
8   B  61 56
9   C  69 81


to look like this:
       trt A  B
    1   A 90  50
    2   B 84 100
    3   C NA  NA
    4   A 42  17
    5   B 61  43
    6   C NA  NA
    7   A 78  84
    8   B 27  36
    9   C NA  NA
类似于

if(df$trt=="C") {
  df[,i] <- NA
}
我们可以使用[选择要更改的行和列,即

df[df$trt == 'C', -1] <- NA
您还可以使用它来选择特定的列

df[df$trt == 'C', -c(1, 3)] <- NA
我们可以使用[选择要更改的行和列,即

df[df$trt == 'C', -1] <- NA
您还可以使用它来选择特定的列

df[df$trt == 'C', -c(1, 3)] <- NA

这是一个函数为is.na的溶液这是一个函数为is.na的溶液 哈奇,但工作


Hacky,但很有用!

是的!很简单:是的!很简单:为什么不在if语句中更改df$trt[i]?我只是在if条件下检查trt是否等于C。df[df$trt=='C',-1]为什么不在if语句中更改df$trt[i]?我只是在if条件下检查trt是否等于C。df[df$trt=='C',-1]
df[-1] <- lapply(df[-1], `is.na<-`, df$trt == "C")
df
#  trt  A  B
#1   A 28 90
#2   B 80 70
#3   C NA NA
#4   A  9 78
#5   B  5 14
#6   C NA NA
#7   A 16 62
#8   B  4  4
    for (i in 1:nrow(df)) {
      if (df$trt[i] == "C") {
        df[i, ] <- NA
        df$trt[i] <- "C"
      }
    }