(в R) как расположить столбец A на основе столбца B

avatar
island1996
8 августа 2021 в 20:26
37
2
1

Я получил вот такой фрейм данных:

Завод Хлеб
А а
А а
Б с
Б б
В д
С а
Д е

Я хочу найти название фабрики с наибольшим количеством хлеба

Я написал два кода и получил разные ответы.

1.

df %>%
  group_by(factory, bread)%>%
  summarise(n = n())%>%
  arrange(desc(n))
df %>% 
  group_by(factory) %>% 
  mutate(number = length(unique(bread)))%>% 
  arrange(desc(number))

Могу ли я спросить, какой из них правильный и почему?

Спасибо!!!!

Источник
akrun
8 августа 2021 в 20:30
0

Вы хотите df %>% group_by(factory) %>% summarise(n = n_distinct(bread))

island1996
8 августа 2021 в 20:33
0

Оно работает!!!! но теперь я получил три разных результата по этому вопросу. Могу я спросить, есть ли проблемы с кодом, который я написал ранее?

akrun
8 августа 2021 в 20:39
0

Ваш второй код похож на мой, то есть length(unique — это n_distinct, но вы создали его как столбец с mutate, где, как я резюмировал, с одной строкой на группу. Первый код в вашем сообщении в основном дает количество каждой комбинации.

Ответы (2)

avatar
ThomasIsCoding
8 августа 2021 в 20:52
1

A data.table вариант

> setorder(setDT(df)[, .(Bread = uniqueN(Bread)), Factory], -Bread)[]
   Factory Bread
1:       B     3
2:       A     1
3:       C     1
4:       D     1
avatar
TarJae
8 августа 2021 в 20:30
3

Мы могли бы использовать n_distinct из пакета dplyr:

library(dplyr)
df %>%
    group_by(factory)%>%
    summarise(bread = n_distinct(bread))

Вывод:

  factory bread
  <chr>   <int>
1 A           2
2 B           1
3 C           1
island1996
8 августа 2021 в 20:34
0

Спасибо, Тарджа! Но могу я спросить, почему код, который я написал, неверен.

TarJae
8 августа 2021 в 20:41
0

Для этих целей лучше всего подходит n_distinct. ваш код не является неправильным!