如何在不知道索引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