Как сгруппировать несколько строк на основе некоторых критериев и сумм значений в R? - PullRequest
0 голосов
/ 01 декабря 2018

data snapshot


Привет всем, Пример: - Выше приведены данные, которые у меня есть.Я хочу сгруппировать возраст 1-2 и посчитать значения.В этих данных значение 4 для возрастной группы 1-2.Точно так же я хочу сгруппировать возраст 3-4 и посчитать значения.Здесь значение для возрастной группы 3-4 равно 6.

Как можно сгруппировать возраст и агрегировать соответствующие ему значения?

Я знаю так: code-

data.frame(df %>% group_by(df$Age) %>% tally())

Но значения агрегируются по отдельным возрастам.Я хочу, чтобы значения, агрегирующие по разному возрасту, были группой, как упомянуто в примере выше.

Любая помощь по этому вопросу будет очень полезна.Большое спасибо всем.

Ответы [ 2 ]

0 голосов
/ 01 декабря 2018

Вот два решения, с базой R и с пакетом dplyr.
Я буду использовать данные, отправленные Shree .

First ,base R.
Я создаю группирующую переменную grp, а затем aggregate на ней.

grp <- with(df, c((age %in% 1:2) + 2*(age %in% 3:4)))
aggregate(age ~ grp, df, length)
#  grp age
#1   1   4
#2   2   6

Секунда a dplyr way.
Функция case_when используется для создания группирующей переменной.Это позволяет легко давать значимые имена группам.

library(dplyr)

df %>%
  mutate(grp = case_when(
    age %in% 1:2 ~ "2:3",
    age %in% 3:4 ~ "3:4",
    TRUE ~ NA_character_
  )) %>%
  group_by(grp) %>%
  tally()
## A tibble: 2 x 2
#  grp       n
#  <chr> <int>
#1 1:2       4
#2 3:4       6
0 голосов
/ 01 декабря 2018

Вот один из способов использования dplyr и ?cut от базы R -

df <- data.frame(age = c(1,1,2,2,3,3,3,4,4,4),
                 Name = letters[1:10],
                 stringsAsFactors = F)

df %>% 
  count(grp = cut(age, breaks = c(0,2,4)))

# A tibble: 2 x 2
  grp       n
  <fct> <int>
1 (0,2]     4
2 (2,4]     6
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...