#r #statistics #transpose
#r #Статистика #транспонировать
Вопрос:
Вывод data %>% select(Year, Type) %>% table()
give me:
Year Type Freq
2001 A 5
2002 A 2
2003 A 9
... ... ...
2001 B 21
2002 B 22
2003 B 19
Как я хотел бы, чтобы мои данные:
Year A B C D E
2001 5 21 .. .. ..
2002 2 22 .. .. ..
2003 9 19 .. .. ..
...
Как я могу этого добиться? Примеры, которые я нахожу, похоже, не соответствуют моему случаю
Ответ №1:
Базовый параметр R, использующий reshape
reshape(
df,
direction = "wide",
idvar = "Year",
timevar = "Type"
)
дает
Year Freq.A Freq.B
1 2001 5 21
2 2002 2 22
3 2003 9 19
Опция data.table
dcast(setDT(df), Year ~ Type)
дает
Year A B
1: 2001 5 21
2: 2002 2 22
3: 2003 9 19
Опция dplyr
df %>%
pivot_wider(names_from = Type, values_from = Freq)
дает
# A tibble: 3 x 3
Year A B
<int> <int> <int>
1 2001 5 21
2 2002 2 22
3 2003 9 19
Данные
> dput(df)
structure(list(Year = c(2001L, 2002L, 2003L, 2001L, 2002L, 2003L
), Type = c("A", "A", "A", "B", "B", "B"), Freq = c(5L, 2L, 9L,
21L, 22L, 19L)), class = "data.frame", row.names = c(NA, -6L))
Комментарии:
1. Большое спасибо (за быстрый ответ)!!! Я пошел с
dcast(setDT(df), Year ~ Type)
отлично работает
Ответ №2:
Опция с base R
использованием xtabs
xtabs(Freq ~ Year Type, df)
Комментарии:
1. Ваше решение работает, однако тогда это таблица. Преобразование его в фрейм данных отменяет процесс
2. @DavidBrouwer Конечно, решение ThomasIsCoding лучше. Однако есть способ преобразовать.
as.data.frame.matrix(xtabs(Freq ~ Year Type, df))