1

我正在尝试执行以下操作:

评估数据框中的 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 个 obs。

编辑: 这是我的数据示例:

             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
4

2 回答 2

2
df[1] <- df[1] + as.integer(df[[1]]) %% 2

由于矢量化操作,速度会快得多。顺便说一句:您不需要yes明确地 in ifelse,但它不会影响速度。

上述命令将所有奇数值加一秒。如果你想做相反的事情,即在偶数值上加一秒,你只需要插入逻辑运算符,!

df[1] <- df[1] + !as.integer(df[[1]]) %% 2
于 2013-11-14T23:36:55.987 回答
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}

于 2013-11-14T23:36:48.053 回答