For循环将变量转换为Date格式

时间:2014-05-19 19:20:37

标签: r date for-loop reference

我有两个相同尺寸和列名的数据框。 我想要将当前存储的日期转换为日期。有没有办法使用for循环自动化?我虽然看到类似于以下脚本的内容:

names <- c("old.df", "new.df")

# use Date format
for (i in names) {
  i$Date <-  as.Date(i$Date, "%d/%m/%Y")
  i$Datetime <- as.Date(i$Datetime, "%d/%m/%Y %h:%m:%s.000")
  i$ClickDatetime <- as.Date(i$ClickDatetime, "%d/%m/%Y %h:%m:%s.000")
}

这实际上不起作用并返回以下错误消息:

Error in i$Date : $ operator is invalid for atomic vectors

我认为我不能以这种方式使用i对象。我想知道是否有一个很好的解决方法,你通常用来实现相同的目标是类似的条件。

1 个答案:

答案 0 :(得分:0)

正确,它不会像那样工作,因为R将i视为字符串,而不是字符串命名的数据帧。这样的事情应该有效:

df_list <- list(old_df, new_df)

# use Date format
for (df in df_list) {
  df["Date"] <-  as.Date(df["Date"], "%d/%m/%Y")
  df["Datetime"] <- as.Date(df["Datetime"], "%d/%m/%Y %h:%m:%s.000")
  df["ClickDatetime"] <- as.Date(df["ClickDatetime"], "%d/%m/%Y %h:%m:%s.000")
}

old_df <- df_list[[1]]
new_df <- df_list[[2]]

有很多方法可以做到这一点。 只有两个数据帧,单独执行每个数据帧可能是一个很好的选择。对于许多具有相同列的数据框,您可以将它们与rbind叠加(放入标识符列以告诉您哪一行属于哪个df),应用您的更改然后再将它们拆分。或者将其放在列表中并构建一个可以与lapply一起使用的函数。