我正在尝试执行以下操作:
评估数据框中的POSIXct类列,如果观察是偶数秒做什么,如果它是奇数秒,则添加1。
这是我到目前为止所做的:
df[,1] <- lapply(df[,1], function(x) ifelse(as.integer(x)%%2==0, yes = x, no = x+1))
此时我的电脑内存不足,可能是因为yes = x
功能中的ifelse
......但我不确定。
有没有更好的方法来解决这个问题?
注意:大约有150,000个障碍物。
修改 以下是我的数据示例:
Timestamp PSTC01 PSTC02 PSTC03 PSTC04 PSTC05 PSTC06 PSTC07 PSTC08 PSTC09 PSTC10 PSTC11
1 2013-09-02 23:56:02 0.225339 NA NA NA NA 0.222298 0.253884 NA 0.243435 NA NA
2 2013-09-02 23:56:32 0.220459 NA NA NA NA 0.220009 0.250797 NA 0.241659 NA NA
3 2013-09-02 23:57:02 0.218379 NA NA NA NA 0.216663 0.252008 NA 0.240208 NA NA
4 2013-09-02 23:57:32 0.218264 NA NA NA NA 0.215935 0.256784 NA 0.240165 NA NA
5 2013-09-02 23:58:02 0.222438 NA NA NA NA 0.220964 0.253382 NA 0.241622 NA NA
6 2013-09-02 23:58:32 0.222154 NA NA NA NA 0.222533 0.252455 NA 0.242187 NA NA
7 2013-09-02 23:59:02 0.223612 NA NA NA NA 0.226128 0.253611 NA 0.243376 NA NA
8 2013-09-02 23:59:32 0.221370 NA NA NA NA 0.225215 0.253617 NA 0.243793 NA NA
9 2013-09-06 00:00:01 0.268708 NA NA NA 0.207481 NA 0.277915 NA NA 0.241519 0.242069
10 2013-09-06 00:00:31 0.268708 NA NA NA 0.207481 NA 0.277915 NA NA 0.241519 0.242069
11 2013-09-06 00:01:01 0.265310 NA NA NA 0.218782 NA 0.269295 NA NA 0.236030 0.211069
12 2013-09-06 00:01:31 0.270377 NA NA NA 0.217813 NA 0.272507 NA NA 0.236714 0.219648
13 2013-09-06 00:02:01 0.271845 NA NA NA 0.213403 NA 0.271097 NA NA 0.236685 0.218460
答案 0 :(得分:2)
df[1] <- df[1] + as.integer(df[[1]]) %% 2
由于矢量化操作,会快得多。顺便说一句:yes
中您不需要ifelse
,但它不会影响速度。
上面的命令为所有奇数值增加了一秒。如果你想做相反的事情,即在偶数值上加一秒,你只需插入逻辑而不是运算符,!
:
df[1] <- df[1] + !as.integer(df[[1]]) %% 2
答案 1 :(得分:1)
尝试
df[df[,1] %% 2 == 0,1] <- df[df[,1] %% 2 == 0,1] + 1
编辑:
看完你的评论后,看起来Sven的想法最有效。试试这个(并采用Sven的方法):
df[,1] <- df[,1] + {as.integer(df[,1]) %% 2}