如果某些条件适用于单个列,那么该如何在数据帧中进行创建,则该数据帧的所有行将为Null。
例如,我有一个数据框。
A<- c(2,3,5,6,5,7,8,5)
B <- c("AB", "BC", "CD", "DE", "EF", "FG", "HI", "IJ")
C <- c("X", "Y", "Z", "W", "X", "Y", "Z", "W")
ABC <-data.frame(A,B,C)
> ABC
A B C
1 2 AB X
2 3 BC Y
3 5 CD Z
4 6 DE W
5 5 EF X
6 7 FG Y
7 8 HI Z
8 5 IJ W
我想让每个ABC$A
等于5,那么所有与5连接的行将为NULL或NA。
我想要的输出应如下所示
> ABC
A B C
1 2 AB X
2 3 BC Y
3 5 <NA> <NA>
4 6 DE W
5 5 <NA> <NA>
6 7 FG Y
7 8 HI Z
8 5 <NA> <NA>
ifelse
函数可以完成这项工作,但是如果我有很多列,该怎么办。我希望它适用于A
以外的所有列。
答案 0 :(得分:1)
您可以使用行/列子设置并将NA
直接分配给所有列。
ABC[ABC$A == 5, -1] <- NA
ABC
# A B C
#1 2 AB X
#2 3 BC Y
#3 5 <NA> <NA>
#4 6 DE W
#5 5 <NA> <NA>
#6 7 FG Y
#7 8 HI Z
#8 5 <NA> <NA>
此处-1
将忽略第一列A
,因为我们不想更改该列中的任何值。
其他一些变体
ABC[-1] <- lapply(ABC[-1], function(x) replace(x, ABC$A == 5, NA))
并使用dplyr
library(dplyr)
ABC %>% mutate_at(-1, ~replace(., A == 5, NA))
答案 1 :(得分:0)
我们可以使用na_if
library(dplyr)
ABC %>%
mutate_at(-1, list(~ na_if(A, y = 5)))