根据前几行替换几行的值

时间:2019-02-21 13:07:16

标签: r for-loop group-by apply rows

首先,让我为不太具体的标题道歉。

我有一个具有如下结构的数据框:

alpha <- data.frame(c(1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4),
            c("A", "A", "A", "A", "B", "B", "B", "B", "C", "C", "C", "C"),
            c(1, 1, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1),
            c(0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 1)) 
colnames(alpha) <- c("key", "group", "v1", "v2")

遍历数据框的行,我想执行以下操作:

在v1等于1但自v1最后等于1以来v2不等于1的情况下,我想将v1的值替换为0。

在v2等于1但自v2最后等于1以来v1不等于1的情况下,我想用0替换v2的值。

此外,我希望在每个“组”中完成此操作,换句话说,将“组”中具有不同值的行分开对待。

如果v1和v2都等于1,我想将两者的值都替换为0。

完成后,数据框应如下所示:

alpha <- data.frame(c(1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4),
                c("A", "A", "A", "A", "B", "B", "B", "B", "C", "C", "C", "C"),
                c(1, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0),
                c(0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 1)) 
colnames(alpha) <- c("key", "group", "v1", "v2")

不好意思,抱歉!但是,我真的无法想到一种更好的描述方式。

感谢您的帮助!

0 个答案:

没有答案