首先,让我为不太具体的标题道歉。
我有一个具有如下结构的数据框:
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")
不好意思,抱歉!但是,我真的无法想到一种更好的描述方式。
感谢您的帮助!