我有一个包含数百列的大数据框。 日期值已作为字符串导入。 所以我用以下方法修复它们:
df$col1 <- as.POSIXct(strptime(df$col1, "%d%b%y:%H:%M:%S"))
但不是为每个日期列复制和粘贴10次,而是可以只提供列列表
date_cols <- c(cols, col2, col3, col4)
并将该函数应用于所有4列?
由于
答案 0 :(得分:1)
我们可以使用lapply
循环“date_cols”对象中的选定列,并通过指定“格式”转换为POSIXct
类。输出将是list
,可以将其分配回原始列。
df[date_cols] <- lapply(df[date_cols], as.POSIXct, format= "%d%b%y:%H:%M:%S")
其中
date_cols <- paste0('col', 1:4)
或者可以使用mutate_each
dplyr
来完成此操作
library(dplyr)
df <- df %>%
mutate_each_(funs(as.POSIXct(., format="%d%b%y:%H:%M:%S")), date_cols)
df
# col1 col2 col3
#1 2002-08-03 03:05:20 2003-01-12 06:02:22 2002-01-03 03:05:20
#2 2005-09-05 04:02:25 2005-01-05 10:20:25 2005-08-05 04:02:25
# col4 col5
#1 2003-02-12 06:02:22 -0.5458808
#2 2005-11-05 10:20:25 0.5365853
注意:如果我们使用%<>%
中的library(magrittr)
代替%>%
,我们无需将输出分配回原始数据集。
set.seed(24)
df <- data.frame(col1=c('03Aug02:03:05:20', '05Sep05:04:02:25'),
col2= c('12Jan03:06:02:22', '05Jan05:10:20:25'),
col3=c('03Jan02:03:05:20', '05Aug05:04:02:25'),
col4= c('12Feb03:06:02:22', '05Nov05:10:20:25'),
col5=rnorm(2))