r - 根据列中的信号填充值

标签 r

在下面的数据中,我想在每个 1 之后递增单元格值,但如果 Z.out = 1,则在下一个单元格将其重置为零。这是一个示例。

起始数据:

Z   B_1 C_1 D_1 E_1 F_1
0   0   0   0   0   0
0   1   0   0   1   0
0   0   0   0   0   0
0   0   0   0   0   0
0   0   0   0   0   0
0   0   1   0   0   0
0   0   0   0   0   0
1   0   0   0   0   0
0   0   0   0   0   1
0   1   0   0   0   0
0   0   1   1   0   0
0   0   0   1   0   0
0   1   0   1   0   0
0   0   0   0   0   0
0   0   0   0   0   0
0   0   0   0   0   0
1   0   0   0   0   0
0   0   0   0   1   0
0   0   0   0   0   0

期望的输出:

Z   B_1 C_1 D_1 E_1 F_1
0   0   0   0   0   0
0   1   0   0   1   0
0   1   0   0   1   0
0   1   0   0   1   0
0   1   0   0   1   0
0   1   1   0   1   0
0   1   1   0   1   0
1   1   1   0   1   0
0   0   0   0   0   1
0   1   0   0   0   1
0   1   1   1   0   1
0   1   1   2   0   1
0   2   1   3   0   1
0   2   1   3   0   1
0   2   1   3   0   1
0   2   1   3   0   1
1   2   1   3   0   1
0   0   0   0   1   0
0   0   0   0   1   0

我想我可以使用 df <- df %>% transmute_at(vars(contains("_1")),) 来定位正确的列并将其替换为所需的输出,但我还没有找到正确的语法Transmute 的函数部分。我试图使用 cumsum() 来携带每列中的值,但是当我尝试基于 z.out 向后翻转时,我只会遇到错误。

感谢您的帮助!

最佳答案

一种dplyr可能是:

df %>%
 group_by(grp = cumsum(Z == 0 & lag(Z, default = first(Z)) == 1)) %>%
 mutate(across(-Z, cumsum))

      Z   B_1   C_1   D_1   E_1   F_1   grp
   <int> <int> <int> <int> <int> <int> <int>
 1     0     0     0     0     0     0     0
 2     0     1     0     0     1     0     0
 3     0     1     0     0     1     0     0
 4     0     1     0     0     1     0     0
 5     0     1     0     0     1     0     0
 6     0     1     1     0     1     0     0
 7     0     1     1     0     1     0     0
 8     1     1     1     0     1     0     0
 9     0     0     0     0     0     1     1
10     0     1     0     0     0     1     1
11     0     1     1     1     0     1     1
12     0     1     1     2     0     1     1
13     0     2     1     3     0     1     1
14     0     2     1     3     0     1     1
15     0     2     1     3     0     1     1
16     0     2     1     3     0     1     1
17     1     2     1     3     0     1     1
18     0     0     0     0     1     0     2
19     0     0     0     0     1     0     2

关于r - 根据列中的信号填充值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64053508/

相关文章:

r - 如何获取带有轮廓的相交线的坐标 - R

R:删除具有相同元素但在不同列中的行

r - 在过滤的每一步打印数据框尺寸

regex - 在 R 中的模式/分隔符之间提取字符串

r - 没有行和列名称的矩阵显示?

r - R ggplot2中连续轴上的字符值

r - 给定 R 中每个值的计数,如何轻松获得平均值、中位数、四分位数等?

r - 使用 R 添加谷歌瓷砖

r - 在 R 中的 ggplot 密度曲线的小平面包裹下使用渐变填充?

R - 切割一个向量