查找具有字符格式化日期值的所有列

时间:2016-09-02 01:27:49

标签: r sqlite datetime

我有一个从sqlite数据库表创建的R数据帧。此数据具有许多日期时间列,现在是字符列。我想将它们大量转换为数据框中的日期列。

我可以像这样一次完成一个专栏:

loan$Maturity <- as.Date(gsub(', 12:00:00 AM', '', loan$Maturity), "%m/%d/%y")

我可以为所有作为因子的列进行批量更新。作为日期值的每一列都包含

i <- sapply(loan, is.factor)
loan[i] <- lapply(loan[i], as.character)

如何获取包含文本“,12:00:00 AM”的每个列,然后使用函数as.Date()更改所有字段,以将所有字符值转换为日期值。

1 个答案:

答案 0 :(得分:0)

此解决方案假设(正如@Tim所要求的)列中的struct A { virtual void f(int a = 7); }; struct B : public A { void f(int a); }; void m() { B* pb = new B; A* pa = pb; pa->f(); // OK, calls pa->B::f(7) pb->f(); // error: wrong number of arguments for B::f() } 的单个实例构成转换。

我提供了两个执行检查和转换的版本。第一个使用, 12:00:00 AM查找要转换的列,然后在vapply中转换它们。第二个版本使用单个lapply进行检查和转换。

lapply

如果列中的每个元素都必须包含#create dummy data.frame df <- data.frame(a=1, b='1/1/92, 12:00:00 AM') #check which columns have ', 12:00:00 AM' in them convertCols <- vapply(df, function(col) sum(grepl(', 12:00:00 AM', col)) > 0, logical(1)) #convert only columns that contained ', 12:00:00 AM' using your conversion function df[convertCols] <- lapply(df[convertCols], function(dates) as.Date(gsub(', 12:00:00 AM', '', dates), "%m/%d/%y")) #create dummy data.frame df <- data.frame(a=1, b='1/1/92, 12:00:00 AM') #done in single lapply df[] <- lapply(df[], function(col) { if(sum(grepl(', 12:00:00 AM', col)) > 0) as.Date(gsub(', 12:00:00 AM', '', col), "%m/%d/%y") else col }) 来构成转换,那么检查将切换为, 12:00:00 AM而不是sum(grepl(', 12:00:00 AM', col)) == length(col)