首页 > 解决方案 > 根据数据框中某一列的条件,删除同一行其他列中的数据

问题描述

我想知道当 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
}

标签: r

解决方案


我们可以使用[来选择行和列来改变,即

df[df$trt == 'C', -1] <- NA

这使,

  trt  A  B
1   A 87 56
2   B 53 18
3   C NA NA
4   A  8  1
5   B 79 38
6   C NA NA
7   A 48 36
8   B 55 22
9   C NA NA

您还可以使用它来选择特定的列,

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

这使,

  trt  A  B
1   A 96 27
2   B 21 13
3   C NA 34
4   A 43 98
5   B 70 93
6   C NA 64
7   A  2 60
8   B 40 94
9   C NA 11

推荐阅读