Подсчитайте пары двух столбцов - PullRequest
1 голос
/ 12 апреля 2019

У меня есть такой кадр данных:

df <- data.frame(var1 = c("google", "yahoo", "google", "yahoo", "google"), 
                 var2 = c("price1","price1","price1","price1","price2"))

Я хочу посчитать частоту пары из двух столбцов.Вот ожидаемый вывод:

df_output <- data.frame(var1 = c("google","google","yahoo","yahoo"), 
                        var2 = c("price1","price2","price1","price2"), count = c(2,1,2,0))
df_output
#      var1   var2 count
# 1 google price1     2
# 2 google price2     1
# 3  yahoo price1     2
# 4  yahoo price2     0

Как мне это сделать?

Ответы [ 3 ]

4 голосов
/ 12 апреля 2019

Базовый раствор R:

as.data.frame(table(df$var1, df$var2))
#     Var1   Var2 Freq
# 1 google price1    2
# 2  yahoo price1    2
# 3 google price2    1
# 4  yahoo price2    0
3 голосов
/ 12 апреля 2019

Одна tidyverse возможность может быть:

df %>%
 count(var1, var2) %>%
 complete(var1, nesting(var2), fill = list(n = 0))

  var1   var2       n
  <fct>  <fct>  <dbl>
1 google price1     2
2 google price2     1
3 yahoo  price1     2
4 yahoo  price2     0

Здесь он рассчитывает на "var1" и "var2", а затем генерирует недостающие комбинации, заполняя их 0.

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

Использование dcast и melt

> as.data.frame(melt(dcast(df,var1~var2)))

OR

Если у вас много столбцов, передайте имена как вектор-

> var_select = c("var1", "var2")
> as.data.frame(table(subset(df, select = var_select)))

   var1   var2  Freq
1 google price1    2
2  yahoo price1    2
3 google price2    1
4  yahoo price2    0

Примечание - Второе решение основано на функции table, предоставленной @ thothal

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...