我想删除多列中包含超过25% NAs的所有行。由于这涉及大约120个相应的列,所以不指定所有列是有用的。最好是类似于: columnA和columnZ之间的一切。
我曾尝试过与以下方面合作:
data[!is.na(data$ColumnA:data$ColumnZ), > 0.25]但它只显示了这个错误:
必须用有效的下标向量子集列。 逻辑下标必须与索引输入的大小匹配。 X输入的大小为250,但下标!is.na(data$ColumnA:data$ColumnZ) > 0.25的大小为3。
(250是数据集中列的实际数量)
我也曾考虑过尝试drop_na,但这导致了类似的问题。
你有什么意见建议?提前谢谢你
发布于 2021-06-08 23:29:24
下面是一个使用"airquality“内置数据集来标识>25% NAs (缺失值)的行的示例:
library(tidyverse)
library(naniar)
data(airquality)
dat1 <- airquality
miss_case_summary(dat1) %>% 
  filter(pct_miss >= 25)
# A tibble: 2 x 3
#   case n_miss pct_miss
#  <int>  <int>    <dbl>
#1     5      2     33.3
#2    27      2     33.3并排除这两种情况(行):
dat2 <- dat1 %>% 
  slice(-c(5, 27))如果数据集中有大量NAs,则可以使用:
list_of_gt25_NAs <- miss_case_summary(dat1) %>% 
  filter(pct_miss >= 25)
dat2 <- dat1 %>% 
  slice(-c(list_of_gt25_NAs$case))发布于 2021-06-08 23:34:44
您可以使用rowMeans(is.na(.)
数据:
set.seed(1)
df<-tibble(matrix(sample(c(1, NA), 64, replace=TRUE, prob = c(0.75, 0.25)), nrow=8))
# A tibble: 8 x 1
  `matrix(...)`[,1]  [,2]  [,3]  [,4]  [,5]  [,6]  [,7]  [,8]
              <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1                 1     1     1     1     1     1     1    NA
2                 1     1     1     1    NA     1     1     1
3                 1    NA     1     1     1     1     1    NA
4                 1     1     1     1    NA    NA    NA     1
5                 1     1     1     1    NA    NA     1    NA
6                 1     1    NA     1     1     1     1     1
7                NA     1     1     1     1     1    NA     1
8                 1     1     1     1     1    NA     1     1过滤器:
df%>%filter(rowMeans(is.na(.))<0.25)
# A tibble: 4 x 1
  `matrix(...)`[,1]  [,2]  [,3]  [,4]  [,5]  [,6]  [,7]  [,8]
              <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1                 1     1     1     1     1     1     1    NA
2                 1     1     1     1    NA     1     1     1
3                 1     1    NA     1     1     1     1     1
4                 1     1     1     1     1    NA     1     1或用行():
df%>%
        rowwise()%>%
        filter(mean(is.na(c_across(everything())))<0.25)https://stackoverflow.com/questions/67895520
复制相似问题