我想将行转换为"如果特定列中的所有行都满足条件,在本例中,某些列中的行为"0";。
我有一个包含数百列的数据框架,但只关心一行在五列中是否都是&;0&;,然后我希望行在这些列中为&;na&;。
一开始我试着这样写:
surveyclean$Col1[surveyclean$Col1 == 0 &
surveyclean$Col2 == 0 &
surveyclean$Col3 == 0 & surveyclean$Col4 == 0 &
surveyclean$Col5 == 0] <-NA
它适用于Col1,但是当我尝试对下一列进行相同操作时,它不起作用,因为Col1现在是"NA"。我可以使用什么代码来确保它在同一时间完成?
我正在处理一个更大的数据帧的五列:
surveyclean
> Col1 Col2 Col3 Col4 Col5
> 0 0 0 0 0
> 1 0 0 0 0
> 0 0 0 0 0
> 0 1 0 0 0
> 0 0 0 0 0
> 0 1 0 0 0
应该是什么样子:
> Col1 Col2 Col3 Col4 Col5
> NA NA NA NA NA
> 1 0 0 0 0
> NA NA NA NA NA
> 0 1 0 0 0
> NA NA NA NA NA
> 0 1 0 0 0
这里使用across
和c_across
的方法,因此我可以按行检查,然后应用于列。
structure(list(Col1 = c(0L, 1L, 0L, 0L, 0L, 0L), Col2 = c(0L,
0L, 0L, 1L, 0L, 1L), Col3 = c(0L, 0L, 0L, 0L, 0L, 0L), Col4 = c(0L,
0L, 0L, 0L, 0L, 0L), Col5 = c(0L, 0L, 0L, 0L, 0L, 0L)), class = "data.frame", row.names = c(NA,
-6L))
代码library(dplyr)
data %>%
rowwise() %>%
mutate(
across(
.cols = Col1:Col5,
.fns = ~ifelse(all(c_across(cols = Col1:Col5) == 0),NA,.)
)
) %>%
ungroup()
输出# A tibble: 6 x 5
Col1 Col2 Col3 Col4 Col5
<dbl> <dbl> <dbl> <dbl> <dbl>
1 NA NA NA NA NA
2 1 0 0 0 0
3 NA NA NA NA NA
4 0 1 0 0 0
5 NA NA NA NA NA
6 0 1 0 0 0