在R中应用列的函数列表

时间:2015-09-06 03:58:12

标签: r datetime dataframe

我有一个包含数百列的大数据框。 日期值已作为字符串导入。 所以我用以下方法修复它们:

df$col1 <- as.POSIXct(strptime(df$col1, "%d%b%y:%H:%M:%S"))

但不是为每个日期列复制和粘贴10次,而是可以只提供列列表

date_cols <- c(cols, col2, col3, col4)

并将该函数应用于所有4列?

由于

1 个答案:

答案 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))