R Перенос значений строк в столбец

#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))