基于R中上一行的值更改列中的值
我有一个看起来有点像这样的数据集:基于R中上一行的值更改列中的值,r,rename,R,Rename,我有一个看起来有点像这样的数据集: Time Event Value 1 right cue 4 2 right cue 5 3 reaction 6 4 reaction 7 5 reaction 5 6 left cue 7 7 left cue 4 8 reaction 2 我想分别得到左右反应的开
Time Event Value
1 right cue 4
2 right cue 5
3 reaction 6
4 reaction 7
5 reaction 5
6 left cue 7
7 left cue 4
8 reaction 2
我想分别得到左右反应的开始和结束之间的平均值。我的问题是数据只是被标记为“反应”,没有右或左。如何根据前一行中的值(左或右提示)将“反应”重命名为“左/右反应”?这是否有效:
library(dplyr)
library(tidyr)
library(stringr)
df %>% mutate(dir = str_extract(Event, 'right|left')) %>%
fill(dir, .direction = 'down') %>%
mutate(Event = case_when(str_detect(Event, 'left|right') ~ Event,
TRUE ~ str_c(dir,Event, sep = ' '))) %>% select(-dir)
# A tibble: 8 x 3
Time Event Value
<dbl> <chr> <dbl>
1 1 right cue 4
2 2 right cue 5
3 3 right reaction 6
4 4 right reaction 7
5 5 right reaction 5
6 6 left cue 7
7 7 left cue 4
8 8 left reaction 2
库(dplyr)
图书馆(tidyr)
图书馆(stringr)
df%>%突变(dir=str_extract(事件“right | left”))%>%
填充(方向,.方向='向下')%>%
当(str_detect(Event,'left | right')~Event,
TRUE~str_c(dir,Event,sep='')%>%select(-dir)
#一个tibble:8x3
时间事件值
1右球杆4
2右球杆5
正确的反应
4正确的反应7
正确的反应
6左球杆7
7左球杆4
8左反应2
你能分享预期结果吗?是的,我基本上希望我的结果与上面一样,除了在时间3、4、5时不只是说“反应”,而是说“正确的反应”(因为它是在正确的提示之后出现的)。我想在时间8的“反应”中说“左反应”(因为它在左提示之后)。我知道当所有表示“反应”的行都表示它们是右反应还是左反应时,如何得到正确的平均值。事实并非如此。这很奇怪,因为我没有收到任何错误,代码似乎在运行,但我的数据保持不变。没有重命名任何内容。您的示例是否模拟了您的实际数据?因为对于你在问题中分享的数据,我们得到了预期的结果。啊,我发现了问题。它只是一个打字错误(字符串匹配中是大写而不是小写),现在可以使用了。谢谢。@user5740534,如果有效,您能接受答案吗?