使用 R 将数据帧的行制作为 NA

Making the rows of a data frame to NAs using R

我有如下数据框,

aid=c(1:10)
x1_var=rnorm(10,0,1)
x2_var=rnorm(10,0,1)
x3_var=rbinom(10,1,0.5)

data=data.frame(aid,x1_var,x2_var,x3_var)


 head(data)
  aid      x1_var     x2_var x3_var
1   1 -0.99759448 -0.2882535      1
2   2 -0.12755695 -1.3706875      0
3   3  1.04709366  0.8977596      1
4   4  0.48883458 -0.1965846      1
5   5 -0.40264114  0.2925659      1
6   6 -0.08409966 -1.3489460      1

如果 x3_var==1(不将 aid 列设为 NA)[=16=,我想将此数据框中的所有行完全设为 NA ]

我尝试了以下代码。

 > data[which(data$x3_var==1),]=NA
> data
   aid      x1_var     x2_var x3_var
1   NA          NA         NA     NA
2    2 -0.12755695 -1.3706875      0
3   NA          NA         NA     NA
4   NA          NA         NA     NA
5   NA          NA         NA     NA
6   NA          NA         NA     NA
7   NA          NA         NA     NA
8    8 -1.78160459 -1.8677633      0
9    9 -1.65895704 -0.8086148      0
10  10 -0.06281384  1.8888726      0

但是这段代码让aid栏的值也变成了NA。有人可以帮我解决这个问题吗?

还有什么方法可以做同样的事情吗?

谢谢

如果您从中删除 aid 列,您的代码将有效。

data[which(data$x3_var==1),-1]=NA

你也可以在没有 which 的情况下执行此操作:

data[data$x3_var==1, -1]=NA

在上述两种情况下,我假设您知道 aid 列的位置,即 1。如果实际上您不知道列的位置,您可以使用 match 来得到它的位置。

data[data$x3_var==1, -match('aid', names(data))] = NA

一个dplyr解决方案。假设要更改的列以示例数据中的“x”开头。

library(dplyr)

set.seed(1001)
df1 <- data.frame(aid = 1:10,
                  x1_var = rnorm(10,0,1),
                  x2_var = rnorm(10,0,1),
                  x3_var = rbinom(10,1,0.5))

df1 %>% 
  mutate(across(starts_with("x"), ~ifelse(x3_var == 1, NA, .x)))

   aid     x1_var     x2_var x3_var
1    1  2.1886481  0.3026445      0
2    2 -0.1775473  1.6343924      0
3    3         NA         NA     NA
4    4 -2.5065362  0.4671611      0
5    5         NA         NA     NA
6    6 -0.1435595  0.1102652      0
7    7         NA         NA     NA
8    8 -0.6229437 -1.0302508      0
9    9         NA         NA     NA
10  10         NA         NA     NA