【问题标题】:Apply a function list of columns in R在 R 中应用列的函数列表
【发布时间】:2015-09-06 03:58:11
【问题描述】:

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

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

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

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

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

谢谢

【问题讨论】:

    标签: r datetime dataframe


    【解决方案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)
    

    或者这可以使用来自dplyrmutate_each 来完成

    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)%&lt;&gt;% 代替%&gt;%,我们不需要将输出分配回原始数据集。

    数据

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

    【讨论】:

      猜你喜欢
      • 2020-01-14
      • 1970-01-01
      • 1970-01-01
      • 2016-06-27
      • 2020-08-20
      • 1970-01-01
      • 1970-01-01
      • 2020-06-27
      • 2014-03-17
      相关资源
      最近更新 更多