【发布时间】:2018-11-07 19:38:51
【问题描述】:
我想根据其他列中的值替换前一行中的值。
这是我的数据示例,其中包含在各种活动中花费的分钟/天。
activity <- c("car","soccer","eat","drink")
category <- c("travel","sport","eat/drink","eat/drink")
duration <- c(75,15,10,160)
df <- data.frame(activity, category,duration)
activity category duration
1 car travel 75
2 soccer sport 15
3 eat eat/drink 10
4 drink eat/drink 160
如果在任何一行中,“drink”的持续时间 > 5 分钟(与第 4 行一样),我想将该行中的“duration”替换为 5 分钟,并添加剩余时间(在本例中为 155分钟)到前一行中的“持续时间”值,除非前一行有“吃/喝”作为其“类别”,在这种情况下,我想将剩余时间添加到前一行之前的行的“持续时间” ...
在上面的示例中,我将在第 2 行的“持续时间”中添加 155 分钟。但是,如果第 2 行也将“吃/喝”作为其“类别”,我想将 155 分钟添加到前面行(第 1 行)。
感谢您的帮助!
到目前为止我已经尝试过:
df$duration[-nrow(df)] <- ifelse(df$activity[-1]=="drink" & df$duration[-1] > 5,
df$duration + c(df$duration[-1]-5, 0),
df$duration)
将 155 分钟添加到上一行,并给我这个:
activity category duration
1 car travel 75
2 soccer sport 15
3 eat eat/drink 165
4 drink eat/drink 160
然后我简单地将第 4 行中的持续时间替换为 5 分钟,就像这样。
df$duration <- ifelse(df$activity =="drink" & df$duration >5,
5,
df$duration)
这给了我这个...
activity category duration
1 car travel 75
2 soccer sport 15
3 eat eat/drink 165
4 drink eat/drink 5
但我不知道如何将 155 分钟移到前一行(第 2 行),条件是它没有“吃/喝”作为类别。在那种情况下,我想将它移动到之前的行,等等......
【问题讨论】:
-
到目前为止你尝试了什么?
-
到目前为止,我添加了一些尝试...
标签: r if-statement replace conditional