2017-03-04 5 views
0

지구 환경에서 여러 데이터 프레임을 가지고 있는데, a, bc이라고합시다.여러 데이터 프레임 중 동일한 열을 변환하십시오.

각각의 데이터 프레임은 012x이라는 이름의 열이 있는데,이 열은 posix 클래스로 변환해야하지만 각 데이터 프레임에 대해 동일한 코드를 작성하지 않고이를 수행 할 방법을 찾고 있습니다. 코드는 다음과 같습니다

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

유일한 방법 하나가 dataframes의 각을 통해 루프 수있는 방법을 고안 할 수는 start_time dataframe 이름을 사용 a

에 변환의 POSIX start_time 변환 할 그?

lapply와이 시도가 첫 번째 dataframe에서 작동 ...

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

}) 

답변

1

데이터 : df1, df2, 영업 이익의 코드에서 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)) 
관련 문제