Р: Как превратить значения в столбце в количество строк? - PullRequest
0 голосов
/ 26 марта 2020

Как мне превратить этот фрейм данных в тот, который выглядит следующим образом таблица . Где количество столбцов равно доступным значениям в столбце месяца, а количество строк равно доступным годам. Спасибо.

Ответы [ 2 ]

0 голосов
/ 26 марта 2020

Базовый путь R менее элегантен, но здесь есть подход.

Result <- reshape(NYHSpot,direction = "wide",idvar="Year", timevar = "Month")
colnames(Result)[2:13] <- month.abb
Result
   Year   Jan   Feb   Mar   Apr   May   Jun   Jul   Aug   Sep   Oct   Nov   Dec
1  1986 0.420 0.340 0.460 0.420 0.410 0.411 0.434    NA    NA    NA    NA    NA
8  1987 0.557 0.556 0.523 0.518 0.541 0.516 0.454 0.489 0.474 0.509 0.504 0.542
20 1988    NA    NA    NA    NA    NA    NA    NA 0.449 0.461 0.452    NA    NA

Данные

NYHSpot <- structure(list(i..Spot.Price = c(0.42, 0.34, 0.46, 0.42, 0.41, 
0.411, 0.434, 0.489, 0.474, 0.509, 0.504, 0.542, 0.557, 0.556, 
0.523, 0.518, 0.541, 0.516, 0.454, 0.449, 0.461, 0.452), Month = c(6L, 
7L, 8L, 9L, 10L, 11L, 12L, 1L, 2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L, 
10L, 11L, 12L, 1L, 2L, 3L), Year = c(1986, 1986, 1986, 1986, 
1986, 1986, 1986, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 
1987, 1987, 1987, 1987, 1988, 1988, 1988)), class = "data.frame", row.names = c(NA, 
-22L))
0 голосов
/ 26 марта 2020

Попробуйте:

Если у вас не установлен пакет tidyr, сначала установите его

install.packages("tidyr")

Тогда следующие коды сделают то, что вы хотите

library(tidyr)

# sample data
DF <- data.frame(Price = c(42,34,42,45,54,60), 
                 Month = c(1,2,3,1,2,3), 
                 Year = c(2000,2000,2000,2001,2001,2001))

DF %>%
  mutate(Month = month.abb[Month]) %>%
  pivot_wider(names_from = Month, values_from = Price)

Результат:

   Year   Jan   Feb   Mar
  <dbl> <dbl> <dbl> <dbl>
1  2000    42    34    42
2  2001    45    54    60

PS: в следующий раз задайте вопрос в воспроизводимом примере. Эта ссылка для вдохновения

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...