Ниже приведено подмножество моих данных об активах
# df1 <- AllAssets %>%
# filter(country %in% c('Morocco', 'Gabon', 'Tunisia')) %>%
# group_by(country, named, active) %>%
# summarize(assets = n())
Эквивалентно этому фрейму данных здесь:
library(dplyr)
library(tibble)
df1 <- structure(list(country = c("Gabon", "Gabon", "Gabon", "Morocco",
"Morocco", "Tunisia", "Tunisia", "Tunisia"), named = c(FALSE,
TRUE, TRUE, TRUE, TRUE, FALSE, TRUE, TRUE), active = c(1, 0,
1, 0, 1, 0, 0, 1), assets = c(8L, 305L, 271L, 254L, 18L, 24L,
350L, 282L)), class = "data.frame", row.names = c(NA, -8L), .Names = c("country",
"named", "active", "assets")) %>% as.tibble() %>% group_by(country, named)
# A tibble: 8 x 4
# Groups: country, named [5]
# country named active assets
# <chr> <lgl> <dbl> <int>
# 1 Gabon FALSE 1. 8
# 2 Gabon TRUE 0. 305
# 3 Gabon TRUE 1. 271
# 4 Morocco TRUE 0. 254
# 5 Morocco TRUE 1. 18
# 6 Tunisia FALSE 0. 24
# 7 Tunisia TRUE 0. 350
# 8 Tunisia TRUE 1. 282
Я создаю электронную таблицу, которая подсчитывает количество активов страны в соответствии сразличные переменные условия.Есть ли более простой и чистый способ получить результат, который я сделал, чем то, что я написал ниже?
df1 %>%
mutate(ctry_namedTF_count = sum(assets)) %>%
group_by(country) %>%
mutate(ctry_count = sum(assets)) %>%
filter(named == TRUE, active == 1) %>%
select(-(named:active)) %>%
rename(named_active = assets,
TotalAssets = ctry_count,
named = ctry_namedTF_count)
# Output:
# A tibble: 3 x 4
# Groups: country [3]
country named_active named TotalAssets
<chr> <int> <int> <int>
1 Gabon 271 576 584
2 Morocco 18 272 272
3 Tunisia 282 632 656
Я, по сути, «свертываю» свой фрейм данных, как описано в dplyr vignette (Ctrl-F 'roll-up') с повторными вызовами sum () и многократным добавлением числа, а не просто подсчетом случаев группировки.Но то, что у меня есть, хотя и функционально, трудно прочитать, и мне интересно, есть ли более простой способ или пользовательская функция, которая имела бы больше смысла.
Например, dplyr :: add_count чрезвычайно прост в использовании длядобавьте столбец, который подсчитывает количество случаев в одном или нескольких столбцах,
> df1 %>% add_count(country, named)
# A tibble: 8 x 5
# Groups: country, named [5]
country named active assets n
<chr> <lgl> <dbl> <int> <int>
1 Gabon FALSE 1. 8 1
2 Gabon TRUE 0. 305 2
3 Gabon TRUE 1. 271 2
4 Morocco TRUE 0. 254 2
5 Morocco TRUE 1. 18 2
6 Tunisia FALSE 0. 24 1
7 Tunisia TRUE 0. 350 2
8 Tunisia TRUE 1. 282 2
, и мне интересно, есть ли что-то, что суммирует переменную между этими группировками.
Есть ли какая-либо функция, подобная этойсуществуют в базе R или в других пакетах мунджинга?Что-то вроде df1 %>% add_aggregate_by_vars_filters(vars = named, filter = 'named == TRUE', sum_var = assets)
, или что-то такое же чистое и практичное?