使用 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
我有如下数据框,
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