我最近在寻求关于如何使用dplyr抑制同一组中除第一个外的所有值的建议(dplyr override all but the first occurrences of a value within a group)。解决方案非常巧妙,但如果我需要抑制接下来的n个值,我就会遇到困难。
例如,在下面的代码中,我创建了一个新的“tag”列:
在setosa组的行中,第4、6、7等被标记为“1”。我想在任何出现“1”之后的下两行中抑制“1”(即将它们转换为“0”)。换句话说,第5行和第6行应设置为“0”,但第7行应保持不变。在这种情况下,第7行碰巧是“1”,因此第8行和第9行应设为“0”,以此类推...
有没有关于如何在dplyr中实现这一点的提示?这个包非常强大,但是由于我要掌握所有的微妙差别,所以对我来说是一个心理挑战...
更多例子: 如果是:0 0 1 1,则输出应为0 0 1 0 如果是:0 0 1 1 1 1 1,则输出应为0 0 1 0 0 1 0
例如,在下面的代码中,我创建了一个新的“tag”列:
library('dplyr')
data(iris)
set.seed(1)
iris$tag <- sample(c(0,1), 150, replace=TRUE, prob = c(0.7, 0.3))
giris <- iris %>% group_by(Species)
# Source: local data frame [150 x 6]
# Groups: Species [3]
#
# Sepal.Length Sepal.Width Petal.Length Petal.Width Species tag
# (dbl) (dbl) (dbl) (dbl) (fctr) (dbl)
# 1 5.1 3.5 1.4 0.2 setosa 0
# 2 4.9 3.0 1.4 0.2 setosa 0
# 3 4.7 3.2 1.3 0.2 setosa 0
# 4 4.6 3.1 1.5 0.2 setosa 1
# 5 5.0 3.6 1.4 0.2 setosa 0
# 6 5.4 3.9 1.7 0.4 setosa 1
# 7 4.6 3.4 1.4 0.3 setosa 1
# 8 5.0 3.4 1.5 0.2 setosa 0
# 9 4.4 2.9 1.4 0.2 setosa 0
# 10 4.9 3.1 1.5 0.1 setosa 0
# .. ... ... ... ... ... ...
在setosa组的行中,第4、6、7等被标记为“1”。我想在任何出现“1”之后的下两行中抑制“1”(即将它们转换为“0”)。换句话说,第5行和第6行应设置为“0”,但第7行应保持不变。在这种情况下,第7行碰巧是“1”,因此第8行和第9行应设为“0”,以此类推...
有没有关于如何在dplyr中实现这一点的提示?这个包非常强大,但是由于我要掌握所有的微妙差别,所以对我来说是一个心理挑战...
更多例子: 如果是:0 0 1 1,则输出应为0 0 1 0 如果是:0 0 1 1 1 1 1,则输出应为0 0 1 0 0 1 0