Расчет процента появления строки в столбце - PullRequest
0 голосов
/ 20 декабря 2018

Я ищу этот вопрос, но мне не нужна помощь.Допустим, у меня есть эти data.frame:

df<-data.frame(
  "id"= 1:10, 
  "fruit"=c("apple", "banana", "orange", "apple","apple", "banana", 
            "orange","apple", "banana", "orange"),
  "bowl"=c("red", "green", "green", "green", "green", "green",
            "green", "green","red","red")
             )

Я хочу создать ограненные круговые диаграммы и, следовательно, я хочу знать процентное содержание каждого фрукта в миске.Если бы это были числовые значения, я бы нашел много помощи, но я не могу использовать его, так как это строка.Я пробовал варианты:

df %>% group_by(bowl) %>% mutate(varfruit=count(fruit))  

Ответы [ 3 ]

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

Попробуйте это.Не самый эффективный способ, но он помогает запускать код построчно, чтобы увидеть, что происходит.

library(dplyr)

df %>% 
  group_by(bowl) %>% 
  mutate(bowl_size = n()) %>% 
  ungroup() %>% 
  group_by(bowl, fruit) %>% 
  mutate(
    fruit_size = n(), 
    fruit_pct = fruit_size / bowl_size
  ) %>% 
  ungroup() %>% 
  arrange(bowl)
0 голосов
/ 20 декабря 2018

Мы можем сделать это с data.table

library(data.table)
setDT(df)[, .N, .(fruit, bowl)][, perc := N/sum(N), .(bowl)][]
0 голосов
/ 20 декабря 2018

Используя dplyr, мы можем count каждый fruit для каждого bowl и для получения отношения делим его на общее число fruits.

library(dplyr)

df %>%
  group_by(bowl) %>%
  count(fruit) %>%
  mutate(perc = n/sum(n)) %>%
  select(-n)

#  bowl  fruit   perc
#  <fct> <fct>  <dbl>
#1 green apple  0.429
#2 green banana 0.286
#3 green orange 0.286
#4 red   apple  0.333
#5 red   banana 0.333
#6 red   orange 0.333

БазаОпция R с использованием prop.table

prop.table(with(df, table(bowl, fruit)), 1)

#     fruit
#bowl        apple    banana    orange
#  green 0.4285714 0.2857143 0.2857143
#  red   0.3333333 0.3333333 0.3333333

Если вы хотите сохранить длинную структуру данных, мы можем преобразовать ее в фрейм данных с помощью

data.frame(prop.table(with(df, table(bowl, fruit)), 1))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...