Используя dplyr суммировать каждый () с is.на()
я пытаюсь обернуть некоторую магию dplyr внутри функции для получения данных.кадр, который потом печатать с xtable.
конечная цель состоит в dplyr версия этой работа и чтение вокруг, я наткнулся на очень полезное summarise_each()
функция, которая после подстановки с regroup()
(так как это находится в функции), я могу использовать, чтобы получить все столбцы.
проблема, с которой я столкнулся (до сих пор), заключается в вызове is.na()
изнутри summarise_each(funs(is.na))
как мне сказали Error: expecting a single value
.
я целенаправлено не публикация моей функции еще только, но минимальный пример следует (NB-это использует group_by()
в то время как в моей функции я заменить regroup()
)...
library(dplyr)
library(magrittr)
> t <- data.frame(grp = rbinom(10, 1, 0.5),
a = as.factor(round(rnorm(10))),
b = rnorm(10),
c = rnorm(10))
t %>%
group_by(grp) %>% ## This is replaced with regroup() in my function
summarise_each(funs(is.na))
Error: expecting a single value
запуск этого не удается, и его вызов is.na()
это проблема, так как, если я вместо этого разработаю количество наблюдений в каждом (необходимое для получения доли отсутствующих), это работает...
> t %>%
group_by(grp) %>% ## This is replaced with regroup() in my function
summarise_each(funs(length))
Source: local data frame [2 x 4]
grp a b c
1 0 8 8 8
2 1 2 2 2
реальная проблема хотя это то, что мне не нужно просто is.na()
внутри каждого столбца, но sum(is.na())
согласно связанному примеру, так что я действительно хотел бы...
> t %>%
group_by(grp) %>% ## This is replaced with regroup() in my function
summarise_each(funs(propmiss = sum(is.na) / length))
но проблема в том, что sum(is.na)
не работает, как я ожидаю (вероятно, потому, что мое ожидание неверно!)...
> t %>%
group_by(grp) %>% ## This is replaced with regroup() in my function
summarise_each(funs(nmiss = sum(is.na)))
Error in sum(.Primitive("is.na")) : invalid 'type' (builtin) of argument
я пытался позвонить is.na()
явно с скобками, но это тоже возвращает ошибку...
> t %>%
+ group_by(grp) %>% ## This is replaced with regroup() in my function
+ summarise_each(funs(nmiss = sum(is.na())))
Error in is.na() : 0 arguments passed to 'is.na' which requires 1
любые советы или указатели на документацию были бы очень благодарны полученный.
спасибо,
slackline
1 ответов
вот возможность, проверенная на небольшом наборе данных с некоторыми NA
:
df <- data.frame(a = rep(1:2, each = 3),
b = c(1, 1, NA, 1, NA, NA),
c = c(1, 1, 1, NA, NA, NA))
df
# a b c
# 1 1 1 1
# 2 1 1 1
# 3 1 NA 1
# 4 2 1 NA
# 5 2 NA NA
# 6 2 NA NA
df %>%
group_by(a) %>%
summarise_each(funs(sum(is.na(.)) / length(.)))
# a b c
# 1 1 0.3333333 0
# 2 2 0.6666667 1
и потому, что вы попросили указатели на документацию:.
относится к каждой части данных, и используется в некоторых примеры на ?summarize_each
. Это описано в Аргументы на ?funs
в качестве "фиктивного параметра" и используется примеры. The .
также кратко описано в Аргументы из ?do
: "...
можно использовать .
для обозначения текущей группы"