Как изменить форму таблиц с помощью dplyr в R, используя годы из столбца - PullRequest
1 голос
/ 06 мая 2020

Я работаю с R, пытаясь изменить форму одной таблицы. Например, в этом случае у меня есть следующие данные:

pet <- c("dog", "cat", "fish", "dog", "cat", "fish", "dog", "cat", "fish")
year <- c("2018", "2018","2018","2019", "2019","2019","2020", "2020","2020")
total <- c("3", "4","10", "5", "2", "3","6","7","8")


animal_store <- data.frame(pet,year,total)

В другом представлении:

   pet year total
1  dog 2018     3
2  cat 2018     4
3 fish 2018    10
4  dog 2019     5
5  cat 2019     2
6 fish 2019     3
7  dog 2020     6
8  cat 2020     7
9 fish 2020     8

Интересно узнать, как я могу получить следующую таблицу, которую я пробовал раньше с dplyr(), особенно с summarise(), но r сказал, что есть проблема с моим кодом:

Pet   2018  2019  2020
dog      3     4    10
cat      4     2     7
fish    10     3     8

Любая помощь или другая точка зрения будет оценена.

Спасибо!

1 Ответ

2 голосов
/ 06 мая 2020

Если мы преобразуем столбец factor итога в numeric, можно использовать xtabs из base R

animal_store$total <- as.numeric(as.character(animal_store$total))
xtabs(total ~ pet + year, animal_store)

Или с tapply

with(animal_store, tapply(total, list(pet, year), FUN = I))
#     2018 2019 2020
#cat     4    2    7
#dog     3    5    6
#fish   10    3    8

В tidyverse мы можем использовать pivot_wider

library(tidyr)
library(dplyr)
animal_store %>% 
     pivot_wider(names_from = year, values_from = total)
...