当另一列等于0时,将特定列更改为NA

3

我是r语言的新手,一直在努力尝试以下操作。如果某个值(下面例子中的“y”)等于0,我想将某些值(“x1”和“x2”)更改为NA,但保留其他值不变(例如“x3”)。示例:

df <- data.frame(y=c(1,0,1,1,0,0,1,0,1,0), x1=c(NA,3,4,7,NA,8,2,NA,3,7), x2=c(1,NA,4,7,5,6,NA,2,3,1), x3=c(9,5,2,4,7,2,5,8,2,2))  

我希望输出结果为:
   y x1 x2 x3
1  1 NA  1  9
2  0 NA NA  5
3  1  4  4  2
4  1  7  7  4
5  0 NA NA  7
6  0 NA NA  2
7  1  2 NA  5
8  0 NA NA  8
9  1  3  3  2
10 0 NA NA  2
2个回答

2
我们可以使用dplyr中的mutate_at
library(dplyr)
df %>%
  mutate_at(vars(c("x1", "x2")), funs(replace(., y == 0, NA)))

#   y x1 x2 x3
#   1 NA  1  9
#2  0 NA NA  5
#3  1  4  4  2
#4  1  7  7  4
#5  0 NA NA  7
#6  0 NA NA  2
#7  1  2 NA  5
#8  0 NA NA  8
#9  1  3  3  2
#10 0 NA NA  2

1
要在第二和第三列进行替换,可以使用
df[df$y == 0, 2:3] <- NA

或者,通过列名来指定列。
df[df$y == 0, c("x1", "x2")] <- NA

或者,使用library(data.table),我们可以这样做

setDT(df)[y==0, c('x1','x2') := NA]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接