r - 根据特定列值更改后续数据,并且仅在其发生的试验期间更改
问题描述
如果该试验包含 1(1 和 0 是唯一可能的值),我正在尝试在试验期间做我认为“向前填充”的事情。这是一组示例数据,其中第一次试验中有一些注视 (=1),而在第二次试验中没有:
trial fixation
1 0
1 0
1 1
1 1
1 0
1 0
1 0
1 0
2 0
2 0
2 0
2 0
2 0
2 0
因此,当函数找到 1 值时,它应该只用 1填充该试验的固定列的其余部分:
trial fixation
1 0
1 0
1 1
1 1
1 1
1 1
1 1
1 1
2 0
2 0
2 0
2 0
2 0
2 0
有没有人有办法做到这一点(最好使用data.table::rleid
或dplyr
)?
非常感谢!
解决方案
我们需要cummax
分组“审判”
library(dplyr)
df1 <- df1 %>%
group_by(trial) %>%
mutate(fixation = cummax(fixation)) %>%
ungroup
-输出
# A tibble: 14 x 2
trial fixation
<int> <int>
1 1 0
2 1 0
3 1 1
4 1 1
5 1 1
6 1 1
7 1 1
8 1 1
9 2 0
10 2 0
11 2 0
12 2 0
13 2 0
14 2 0
正如cummax
from一样base R
,我们也可以使用base R
方法
df1$fixation <- with(df1, ave(fixation, trial, FUN = cummax))
数据
df1 <- structure(list(trial = c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L,
2L, 2L, 2L, 2L, 2L), fixation = c(0L, 0L, 1L, 1L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L)), class = "data.frame", row.names = c(NA,
-14L))
推荐阅读
- javascript - React.js - 如何从任何地方轻松调用组件的方法?
- php - 如何在 Windows docker 镜像上安装 PHP composer?
- android - 如何在模拟器和物理设备上使用命令行“启动”Android Gradle 应用程序。不只是建造
- android-studio - Android Studio 使用改造从本地 sqlite 表中获取数据并插入到服务器上的表中
- javascript - 在 node express 和 MVC 中处理文件需要帮助
- google-cloud-platform - 仅在特定时间违反条件时,如何在 Google Cloud 监控中触发警报?
- html - 在 Wordpress 页面中显示 JSON 动画
- javascript - 是否有一个优雅的 javascript 等价于使用格式化的这个 python 代码?
- python-3.x - 如何在 MS Office 组织中找到“报告至”的电子邮件地址?
- flutter - 复杂的 JSON 映射