我有这个,它很有用:
data %>%
select_if(function(x) any(is.na(x))) %>%
summarise_each(funs(sum(is.na(.))))
警告消息:从dplyr0.7.0开始不推荐
summarise_each()
。请改用across()
。
当我更改sumarise_each()时:
data %>%
select_if(function(x) any(is.na(x))) %>%
summarise(across(funs(sum(is.na(.)))))
这种情况发生在:
错误:
summarise()
输入..1
的问题。
X必须具有有效下标向量的子集列。
x有错误的类型fun_list
。
ℹ它必须是数字或字符。
输入..1
为across(funs(sum(is.na(.))))
。
我想用跨函数更新我的代码。
发布于 2020-09-18 18:03:22
这样做的方式是:
library(dplyr)
df %>%
summarize(across(where(~any(is.na(.)), ~sum(is.na(.))))
starwars %>%
summarise(across(where(~any(is.na(.))), ~sum(is.na(.))))
height mass hair_color birth_year sex gender homeworld species
<int> <int> <int> <int> <int> <int> <int> <int>
1 6 28 5 44 4 4 10 4
您不再需要select_if
和across()
。where()
在across()
中允许您执行逻辑检查。然后提供总结功能。~
表示法允许您执行引用数据的函数,其中点引用eahc列中的数据。
发布于 2020-09-18 18:17:45
我认为你想做的是
library(dplyr)
df <- data.frame(id=c("001","002"), A = c(0,0), B= c(NA,0), C=c(NA,1))
df
id A B C
1 001 0 NA NA
2 002 0 0 1
df %>%
select(where(function(x) any(is.na(x)))) %>%
rowwise %>%
mutate(sumNA = sum(is.na(c_across(everything()))))
# A tibble: 2 x 3
# Rowwise:
B C sumNA
<dbl> <dbl> <int>
1 NA NA 2
2 0 1 0
这将选择所有包含NA的列,然后添加一个新列,该列显示每行中有多少NA
https://stackoverflow.com/questions/63959836
复制相似问题