Как получить процентное значение каждого столбца по всем строкам в R - PullRequest
0 голосов
/ 14 марта 2019

Как использовать Tidyverse R, как мне получить значение процент каждого столбца в строках?Используя в качестве примера набор данных mpg, я попробовал следующий код:

new_mpg <- mpg %>%
  group_by(manufacturer, model) %>%
    summarise (n = n()) %>% 
      spread(model, n) %>% 
        mutate_if(is.integer, as.numeric)

new_mpg[,-1] %>% 
  mutate(sum = rowSums(.))

Я хочу создать следующий вывод:

manufacturer | 4runner4wd |     a4    | a4 quattro | a6 quattro | altima |
--------------------------------------------------------------------------
audi         |     NA     | 0.3888889 |   0.444444 | 0.166667   |   NA   |

Однако, когда я добираюсь до

new_mpg[,-1] %>% 
      mutate(sum = rowSums(.))

столбец суммы возвращает NA.И я не могу рассчитать n () / сумма.Я просто получу АН.Есть идеи как это исправить?

1 Ответ

0 голосов
/ 14 марта 2019

Как упомянуто в комментариях @camille, вам нужно na.rm = TRUE в вызове rowSums. Чтобы получить процент каждой модели от производителя, необходимо сначала подсчитать количество каждой модели, сгруппированных по производителю и модели, а затем получить процент, сгруппированный только по производителю. dplyr умный в этом смысле, потому что он удаляет один слой группировки после summarise, поэтому вам просто нужно добавить mutate:

library(dplyr)
library(tidyr)
library(ggplot2)
new_mpg <- mpg %>%
  group_by(manufacturer, model) %>%
  summarise (n = n()) %>% 
  mutate(n = n/sum(n)) %>% 
  spread(model, n) %>% 
  mutate_if(is.integer, as.numeric)

new_mpg[,-1] %>% 
  mutate(sum = rowSums(., na.rm = TRUE))
...