我有一个包含多个列的数据框。奇数列包含时间序列,偶数列包含数据:
time1.in.s <- seq(0.010, 100, length.out = 100)
time2.in.s <- seq(0.022, 100, length.out = 100)
data1 <- seq(-10, 100, length.out = 100)
data2 <- seq(-25, 80, length.out = 100)
my.df <- data.frame(time1.in.s, data1, time2.in.s, data2)
(在现实生活中,我有更多专栏)。
现在时间是奇数列是相对的,以秒为单位。
我想为所有时间值添加一个给定的开始时间:
start.time <- strptime("2016-11-22_15-44-24",
format = "%Y-%m-%d_%H-%M-%S",
tz = "UTC")
我知道如何选择奇数列:
odd.indexes <- seq(1, ncol(my.df), 2)
但是为了将开始时间添加到相对时间,我做了一些天真的事......
my.df[, odd.indexes] <- start.time + my.df[, odd.indexes]
......这不起作用:
start.time + my.df [,odd.indexes]出错: 非数字参数 到二元运算符
另外:警告消息:不兼容的方法 (“+ .POSIXt”,“Ops.data.frame”)代表“+”
如何让它发挥作用?
答案 0 :(得分:1)
我们需要循环遍历列,然后执行+
my.df[, odd.indexes] <- lapply(my.df[, odd.indexes], `+`, start.time)
答案 1 :(得分:1)
以下内容也应该有效(略微修改你正在做的事情):
my.df[, odd.indexes] <- as.data.frame(start.time + as.matrix(my.df[, odd.indexes]))