2017-03-04 10 views
0

地球環境内にいくつかのデータフレームがありますので、それらをa,b、およびcとしましょう。複数のデータフレームの同じ列を変換する

各データフレームにはstart_timeという名前の列があり、posixクラスに変換する必要がありますが、各データフレームに同じコードを書き込まずにこれを行う方法を探しています。コードは次のとおりです。唯一の方法1は、データフレームのそれぞれをループへの道を考案し、POSIXするstart_timeを変換することができ、データフレーム名を使用a

start_timeを変換します

a$start_time <- strptime(a$start_time, format = '%Y-%m-%d %H:%M:%S') 

lapplyとこの試みは、最初のデータフレーム上で動作します...

ll <- list(a, b, c) 
lapply(ll,function(df){ 
    df$start_time <- strptime(df$start_time, format = '%Y-%m-%d %H:%M:%S')   

}) 

答えて

1

データ:df1df2、OPのコードでdf3

df1 <- data.frame(start_time = seq(Sys.time(), Sys.time() + 100, 10))  
df2 <- data.frame(start_time = seq(Sys.time(), Sys.time() + 100, 10))  
df3 <- data.frame(start_time = seq(Sys.time(), Sys.time() + 100, 10)) 

# create a vector with names of the data frames 
data_vec <- c('df1', 'df2', 'df3') 

# loop through the data_vec and modify the start_time column 
a1 <- lapply(data_vec, function(x) { 
    x <- get(x) 
    x <- within(x, start_time <- strptime(start_time, format = '%Y-%m-%d %H:%M:%S')) 
    return(x) 
    }) 

# assign names to the modified data in a1 
names(a1) <- data_vec 

# list objects in global environment 
ls() 
# [1] "a1"  "data_vec" "df1"  "df2"  "df3" 

# remove df1, df2, df3 from global environment 
rm(list = c('df1', 'df2', 'df3')) 

# confirm the removal of data 
ls() 
# [1] "a1"  "data_vec" 

# assign the named list in a1 as data in global environment 
list2env(a1, envir = .GlobalEnv) 

# list objects in global environment and confirm that the data appeared again 
ls() 
# [1] "a1"  "data_vec" "df1"  "df2"  "df3"  

# output 
head(df1) 
#   start_time 
# 1 2017-03-03 22:49:54 
# 2 2017-03-03 22:50:04 
# 3 2017-03-03 22:50:14 
# 4 2017-03-03 22:50:24 
# 5 2017-03-03 22:50:34 
# 6 2017-03-03 22:50:44 

head(df2) 
#   start_time 
# 1 2017-03-03 22:49:54 
# 2 2017-03-03 22:50:04 
# 3 2017-03-03 22:50:14 
# 4 2017-03-03 22:50:24 
# 5 2017-03-03 22:50:34 
# 6 2017-03-03 22:50:44 
+0

働い興味深いワークフロー、作るために使用します –

1

、データセットが返されませんでした。だから、それが対象と匿名関数呼び出しを返さず、基本的に

lapply(ll,function(df){ 
    df$start_time <- strptime(df$start_time, format = '%Y-%m-%d %H:%M:%S')   
    df 
}) 

である。しかし、transformはオプションです。またstrptimePOSIXltクラスも返します。私達はちょうどPOSIXctが必要な場合は、as.POSIXct

lapply(ll, transform, start_time = as.POSIXct(start_time, format = '%Y-%m-%d %H:%M:%S')) 

それとも、よりコンパクト

library(lubridate) 
lapply(ll, transform, start_time = ymd_hms(start_time)) 
関連する問題