【问题标题】:How can I apply a function to a list of dataframes in R?如何将函数应用于 R 中的数据框列表?
【发布时间】:2021-01-22 20:20:57
【问题描述】:

我正在尝试绑定许多数据帧。它们都具有相同的列数和相同的列名。 但是,bind_rows 不起作用,因为某些数据帧将特定列存储为日期,而另一些则存储为字符。如何在所有数据框中应用将日期转换为字符或反之亦然的函数?如果我转换所有数据框中的所有日期列,那就更好了。 这是我正在尝试做的一些虚拟代码:

    library(tidyverse)

employee <- c('John Doe','Peter Gynn','Jolie Hope')
salary <- c(21000, 23400, 26800)
startdate <- as.Date(c('2010-11-1','2008-3-25','2007-3-14'))

startdate.2<-c('2010-11-1','2008-3-25','2007-3-14')


df1<-data.frame(employee,salary, startdate)
df2<-data.frame(employee,salary, startdate.2) %>% rename(startdate=startdate.2)

df3<-bind_rows(df1,df2)

错误:无法组合 ..1$startdate..2$startdate

感谢您的帮助!

【问题讨论】:

  • 对于bind_rows,列的类型应该匹配。其中一个是Date,另一个是character

标签: r apply lapply


【解决方案1】:

以下是使用 purrr 将所有日期列转换为字符列的方法

list(df1, df2) %>% 
  map(~mutate(.x, across(where(lubridate::is.Date), as.character))) %>% 
  bind_rows()

或者如果您想将名称中带有“日期”的所有列转换为日期值,您可以这样做

list(df1, df2) %>% 
  map(~mutate(.x, across(contains("date"), as.Date))) %>% 
  bind_rows()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-24
    • 2021-07-11
    • 2021-03-20
    • 1970-01-01
    • 2021-08-28
    相关资源
    最近更新 更多