如何在不知道索引R的情况下在多列中应用as.Date函数

如何在不知道索引R的情况下在多列中应用as.Date函数,r,lapply,as.date,R,Lapply,As.date,希望在不知道位置的情况下转换多个列的类别。 这是数据集 # Dataset name call : df . # It is a example , real data has many columns # that you cannot have a clear index by one sight. A.Date Price B.Date C.Date Size D.Date 2017-01-01 502 2017-01-03 2017-

希望在不知道位置的情况下转换多个列的类别。

这是数据集

# Dataset name call : df . # It is a example , real data has many columns
# that you cannot have a clear index by one sight.

A.Date      Price  B.Date       C.Date      Size    D.Date
2017-01-01   502   2017-01-03   2017-11-01   45.4   2016-10-01
2015-01-31   602   2017-02-03   2013-07-11   65.4   2016-03-24
我有如下代码:

 df[,grepl("Date",colnames(df))] <-
 lapply(df[,grepl("Date",colnames(df))],function(x) as.Date(x))
甚至我也试过这个代码:

 DateCol <- grep("Date",names(df)) 
 df[,c(DateCol)] <- as.Date(df[,c(DateCol)])

DateCol如果xxx.Date列为字符,则

库(dplyr)

txt虽然@Tung已经提供了一个很好的解决方案,但我觉得在这种情况下,
dplyr::mutate_at
应该是更合适的选择,因为列预计会更改为
Date
包含
日期
作为其名称的一部分。因此,如果数据帧包含其他
字符
类型列,则
mutate_at
将提供选择列的灵活性

grep(“Date”,name(.),value=TRUE)
提供列列表,其中包含
Date
作为列名称的一部分

mutate_at
应用
as.Date
函数将这些列转换为
Date
类型

library(dplyr)

df %>%
  mutate_at(vars(grep("Date",names(.), value = TRUE)), funs(as.Date))

#      A.Date Price     B.Date    C.Date Size     D.Date
#1 2017-01-01   502 2017-01-03 2017-11-01 45.4 2016-10-01
#2 2015-01-31   602 2017-02-03 2013-07-11 65.4 2016-03-24

您能否显示列的
。第二个解决方案将不起作用,因为
as.Date
需要一个
向量或列作为输入。我对“日期”列的
类有疑问所有日期列类都是“字符”。谢谢Neilfwstry,我忘了提一个重要的问题,一些日期cols不能转换。因为它包含一个元素:“2017-01-01;2018-01-01”。因此,解决方案应该避免这些类型的col,而是转换为普通类型。谢谢董先生。但是在“is.character”和“as.Date”之后应该填充什么参数呢*mutate_impl(.data,dots)中出错:计算错误:字符串不是标准的明确格式。不需要任何参数
mutate\u if
检查列是否为字符,然后将它们转换为
Date
。尝试重新启动您的R会话(RStudio中的Ctrl+Shift+F10),然后仅运行我的代码。谢谢,您的方法有效。出现错误的原因是,某些日期列包含双日期,如:“2019-01-31;2017-02-02”,这使得查看者无法回答所有问题。我的问题是无法正确地提出问题来解决我需要应用于所有列的情况,该问题包含“日期”并删除多个日期列。谢谢MKR,这是在mutate_at中应用grep的一个好例子。它们是一次作业。
library(dplyr)

df %>%
  mutate_at(vars(grep("Date",names(.), value = TRUE)), funs(as.Date))

#      A.Date Price     B.Date    C.Date Size     D.Date
#1 2017-01-01   502 2017-01-03 2017-11-01 45.4 2016-10-01
#2 2015-01-31   602 2017-02-03 2013-07-11 65.4 2016-03-24