【发布时间】:2018-02-11 15:39:23
【问题描述】:
我想使用包含 POSIXct 数据点的 df 完成几个步骤。
基本上,数据框中的三列具有不同的日期。需要达到以下几点:
将三列中每一行的所有日期更改为相同(保持时间不变
计算列/行中的实际时间与标称日期/时间组合之间的时间差,这会产生三个新列(秒)
我已经成功地做到了,但是我的答案(我已经寻求帮助)似乎太长太麻烦了,这里是:
我做的第一件事是创建一个用于计算的名义日期:
date.zero<- as.POSIXct("2018-01-01 00:00:00 EST")
然后我将特定列中数据框每一行中的所有日期更改为相同的日期
df$tim.col.1 <- as.POSIXct(sub("\\S+", "2018-01-01", df$tim.col.1))
df$tim.col.2 <- as.POSIXct(sub("\\S+", "2018-01-01", df$tim.col.2))
df$tim.col.2 <- as.POSIXct(sub("\\S+", "2018-01-01", df$tim.col.2))
最后,我使用 lapply 从 date.zero 中减去日期以产生以秒为单位的时差(即基本上从 00:00:00 开始的秒数)
df["tim.col.1"] <- lapply(df["tim.col.1"],function(x) x-date.zero)
df["tim.col.2"] <- lapply(df["tim.col.2"],function(x) x-date.zero)
df["tim.col.3"] <- lapply(df["tim.col.3"],function(x) x-date.zero)
现在。我猜所有这些都可以很容易地使用 lapply 以更好的方式或使用 dplyr 来完成,所以我不需要输入所有这些代码......也许使用类似的东西但是将所有东西集成在一起?
newdf <- df %>% rowwise () %>% mutate(xxx=tim.col.1-date.zero,
xxx2=tim.col.2-date.zero,
xxx3=tim.col.3-date.zero)
有人可以告诉我如何最简洁有效地实现这一点。
【问题讨论】:
-
我投票决定将此问题作为离题结束,因为要求改进工作代码的问题属于 Code Review,而不是 Stack Overflow。
标签: r dplyr posixct coding-efficiency