подсчет наблюдений по группам на основе условий 2 переменных в R - PullRequest
0 голосов
/ 25 апреля 2019

Это пример коротких данных. Исходные данные имеют много столбцов и строк.

голова (df, 15)

    ID   col1   col2
1   1  green yellow
2   1  green   blue
3   1  green  green
4   2 yellow   blue
5   2 yellow yellow
6   2 yellow   blue
7   3 yellow yellow
8   3 yellow yellow
9   3 yellow   blue
10  4   blue yellow
11  4   blue yellow
12  4   blue yellow
13  5 yellow yellow
14  5 yellow   blue
15  5 yellow yellow

что я хочу посчитать, сколько разных цветов в col2, включая цвет col1. Например: для ID = 4 в col2 есть только 1 цвет. если мы включим col1, есть 2 разных цвета. Таким образом, вывод должен быть 2 и так далее.

Я пытался таким образом, но он не дает мне желаемого результата: ID = 4 превращается в 0, что не так, как я хочу. Так, как я мог сказать R считать их включая цвет в col1?

out <- df %>%
  group_by(ID) %>%
  mutate(N = ifelse(col1 != col2, 1, 0))

Мой желаемый результат примерно такой:

ID  col1    count
1   green   3
2   yellow  2
3   yellow  2
4   blue    2
5   yellow  2

1 Ответ

1 голос
/ 25 апреля 2019

Вы можете сделать:

df %>%
 group_by(ID, col1) %>%
 summarise(count = n_distinct(col2))

     ID col1   count
  <int> <chr>  <int>
1     1 green      3
2     2 yellow     2
3     3 yellow     2
4     4 blue       1
5     5 yellow     2

Или даже:

df %>%
 group_by(ID, col1) %>%
 summarise_all(n_distinct)

     ID col1    col2
  <int> <chr>  <int>
1     1 green      3
2     2 yellow     2
3     3 yellow     2
4     4 blue       1
5     5 yellow     2

Для группировки по трем строкам:

df %>%
 group_by(group = gl(n()/3, 3), col1) %>%
 summarise(count = n_distinct(col2))
...