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

У меня есть несколько фреймов данных с разными именами и одной и той же переменной даты.Я хочу изменить тип переменной на yearmon.Я пытался создать список со всеми фреймами данных и изменить тип, но я не могу unlist данные, как это было.Перепробовал все коды на этом сайте, но всегда есть какая-то ошибка.Я думаю, что в моем случае я должен подходить к этому с помощью цикла.

Это код на данный момент:

df=data.frame(date=c("201101","201102","201103"),value=c(3,4,6))
df2=data.frame(date=c("201101","201102","201103"),value=c(3,4,6))
df3=data.frame(date=c("201101","201102","201103"),value=c(3,4,6))

library(zoo)

# list of all impoted dataframes
files <- ls()[sapply(mget(ls(), .GlobalEnv), is.data.frame)] 

for (i in files){        #search for the dataframe name                                                       
  for (j in length(get(i)[,1])){   #get the length of current data frame
  d[j]=get(i)[j,1]     #gets current data frame’s Date_col (the column with date)
  d[j] <- as.yearmon(as.character(d[j,]), "%Y%m") #convert 
  assign(get(i)[j,1],d[j])  # an error shows here 
  }
}

Это код, который я пробовал для кадров данных в списке.

l.df <- lapply(ls(), function(x) if (class(get(x)) == "data.frame")
get(x))
files <- ls()[sapply(mget(ls(), .GlobalEnv), is.data.frame)]
names(l.df) <-  files

lapply(l.df, transform, date=as.yearmon(as.character(date, "%Y%m")))

Возвращает NA для даты.

1 Ответ

2 голосов
/ 04 июля 2019

Мы можем сделать ( Примечание: Вам необходимо установить stringsAsFactors на FALSE при формировании ваших наборов данных или преобразовать дату в символ перед использованием этого решения, см. Ниже):

lapply(my_list ,
       function(x) 
       transform(x, 
                 date=zoo::as.yearmon(anytime::anydate(x$date))))

Результат:

[[1]]
      date value
1 Jan 2011     3
2 Feb 2011     4
3 Mar 2011     6

[[2]]
      date value
1 Jan 2011     3
2 Feb 2011     4
3 Mar 2011     6

[[3]]
      date value
1 Jan 2011     3
2 Feb 2011     4
3 Mar 2011     6

Данные:

df=data.frame(date=c("201101","201102","201103"),value=c(3,4,6),
              stringsAsFactors = F)
df2=data.frame(date=c("201101","201102","201103"),value=c(3,4,6),
               stringsAsFactors = F)
df3=data.frame(date=c("201101","201102","201103"),value=c(3,4,6),
               stringsAsFactors = F)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...