R - Использование приведения из пакета изменения формы для преобразования списка фреймов данных - PullRequest
0 голосов
/ 14 июня 2019

Я создал этот тестовый фрейм.

library(lubridate)
set.seed(23) 

date_list = seq(ymd('2000-01-01'),ymd('2003-12-31'),by='day')
testframe = data.frame(Date = date_list)
testframe$Day = substr(testframe$Date, start = 6, stop = 10)
testframe$ABC = rnorm(1461)
testframe$Year = as.numeric(format(testframe$Date,'%Y'))
testframe$Date = NULL
testframe = testframe[,c(ncol(testframe),1:(ncol(testframe)-1))]

У меня вопрос, как выполнить эту команду в списке фреймов данных.Это работает для одного отдельного фрейма данных:

library(reshape)
testframe_t = cast(testframe, Year ~ Day)

Но когда я создаю список фреймов данных, он не работает.Где моя ошибка?

df_list = list(testframe, testframe, testframe)

lapply(df_list, function(x) {
  cast(df_list$x$Year ~ df_list$x$Day)})

Есть идеи?

1 Ответ

1 голос
/ 14 июня 2019

Вот подход dplyr / tidyr / purrr.

library(tidyverse)
testframe1 = data.frame(Date = seq(ymd('2000-01-01'),ymd('2003-12-31'),by='day')) %>% 
  mutate(Day = substr(Date, start = 6, stop = 10),
         ABC = rnorm(1461),
         Year = as.numeric(format(Date,'%Y')),
         Date = NULL) %>% 
  select(Year, Day, ABC)

testframe2 = data.frame(Date = seq(ymd('2004-01-01'),ymd('2007-12-31'),by='day')) %>% 
  mutate(Day = substr(Date, start = 6, stop = 10),
         ABC = rnorm(1461),
         Year = as.numeric(format(Date,'%Y')),
         Date = NULL) %>% 
  select(Year, Day, ABC)


df_list = list(testframe1, testframe2)

df = map_dfr(df_list, ~.x %>% spread(Day, ABC)) 
...