我有两个相同尺寸和列名的数据框。 我想要将当前存储的日期转换为日期。有没有办法使用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
对象。我想知道是否有一个很好的解决方法,你通常用来实现相同的目标是类似的条件。
答案 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
一起使用的函数。