R: Как преобразовать столбец даты нескольких data.frames внутри списка? - PullRequest
0 голосов
/ 16 января 2020

У меня есть несколько похожих data.frames внутри списка, первый столбец которого является столбцом даты. Мне нужно использовать as.Date, чтобы преобразовать его во временную серию, которая будет построена. Однако он не назначает преобразованный вектор соответствующему вектору каждого элемента data.frame в списке.

temporizar <- function(df){df$Semana <- as.Date(df$Semana, format = "%d/%m/%y")}
lapply(files, temporizar)

[[1]]
 [1] "2020-01-11" "2020-01-18" "2020-01-25" "2020-02-01" "2020-02-08" "2020-02-15" "2020-02-22" "2020-02-29" "2020-03-07" "2020-03-14"
[11] "2020-03-21" "2020-03-28" "2020-04-04" "2020-04-11" "2020-04-18" "2020-04-25" "2020-05-02" "2020-05-09" "2020-05-16" "2020-05-23"
[21] "2020-05-30" "2020-06-06" "2020-06-13" "2020-06-20" "2020-06-27" "2020-07-04" "2020-07-11" "2020-07-18" "2020-07-25" "2020-08-01"
[31] "2020-08-08" "2020-08-15" "2020-08-22" "2020-08-29" "2020-09-05" "2020-09-12" "2020-09-19" "2020-09-26" "2020-10-03" "2020-10-10"
[41] "2020-10-17" "2020-10-24" "2020-10-31" "2020-11-07" "2020-11-14" "2020-11-21" "2020-11-28" "2020-12-05" "2020-12-12" "2020-12-19"
[51] "2020-12-26"

[[2]]
 [1] "2020-01-11" "2020-01-18" "2020-01-25" "2020-02-01" "2020-02-08" "2020-02-15" "2020-02-22" "2020-02-29" "2020-03-07" "2020-03-14"
[11] "2020-03-21" "2020-03-28" "2020-04-04" "2020-04-11" "2020-04-18" "2020-04-25" "2020-05-02" "2020-05-09" "2020-05-16" "2020-05-23"
[21] "2020-05-30" "2020-06-06" "2020-06-13" "2020-06-20" "2020-06-27" "2020-07-04" "2020-07-11" "2020-07-18" "2020-07-25" "2020-08-01"
[31] "2020-08-08" "2020-08-15" "2020-08-22" "2020-08-29" "2020-09-05" "2020-09-12" "2020-09-19" "2020-09-26" "2020-10-03" "2020-10-10"
[41] "2020-10-17" "2020-10-24" "2020-10-31" "2020-11-07" "2020-11-14" "2020-11-21" "2020-11-28" "2020-12-05" "2020-12-12" "2020-12-19"
[51] "2020-12-26"

[[3]]
 [1] "2020-01-11" "2020-01-18" "2020-01-25" "2020-02-01" "2020-02-08" "2020-02-15" "2020-02-22" "2020-02-29" "2020-03-07" "2020-03-14"
[11] "2020-03-21" "2020-03-28" "2020-04-04" "2020-04-11" "2020-04-18" "2020-04-25" "2020-05-02" "2020-05-09" "2020-05-16" "2020-05-23"
[21] "2020-05-30" "2020-06-06" "2020-06-13" "2020-06-20" "2020-06-27" "2020-07-04" "2020-07-11" "2020-07-18" "2020-07-25" "2020-08-01"
[31] "2020-08-08" "2020-08-15" "2020-08-22" "2020-08-29" "2020-09-05" "2020-09-12" "2020-09-19" "2020-09-26" "2020-10-03" "2020-10-10"
[41] "2020-10-17" "2020-10-24" "2020-10-31" "2020-11-07" "2020-11-14" "2020-11-21" "2020-11-28" "2020-12-05" "2020-12-12" "2020-12-19"
[51] "2020-12-26"

Как правильно преобразовать в as.Date каждый вектор даты каждого элемента data.frame в списке ?

PS: я бразилец, так что "temporizar" означает "изменение во времени", а "Semana" означает "Неделя"

Ответы [ 2 ]

0 голосов
/ 16 января 2020

Я решил это с для l oop.

for(i in names(files)){
  files[[i]]$Semana <- as.Date(files[[i]]$Semana, format = "%d/%m/%y")
  print(i)
  str(files[[i]])
}

Я использовал print (i) и str (файлы [[i]]) * в качестве контрольных точек для преобразования. Похоже, это сработало. Большое спасибо за ваши ответы.

0 голосов
/ 16 января 2020

Я думаю, что вы использовали read.delim или read.table для чтения в файле, и по умолчанию символьные столбцы являются факторами.

Попробуйте что-то вроде этого:

DATES = as.character(
seq(as.Date("01/01/92",format="%d/%m/%y"), 
as.Date("31/12/92",format="%d/%m/%y"), 
length.out=100))

files = lapply(1:5,function(i)
data.frame(Semana = sample(DATES,5),value=runif(5)))

Итак Вы должны проверить:

 str(files[[1]])
'data.frame':   5 obs. of  2 variables:
 $ Semana: Factor w/ 5 levels "1992-02-17","1992-05-31",..: 4 1 5 2 3
 $ value : num  0.892 0.551 0.457 0.957 0.453

Тогда функция ниже должна работать

temporizar <- function(df){
df$Semana <- as.Date(as.character(df$Semana))
df
}
lapply(files, temporizar)
...