我有一个data.frame。
data.frame(color = c("G","G","G","R","R","R","R","R","R","R","G","G"),
trial = c(1, 1, 1, 2, 2, 2, 3, 3, 3, 3, 4, 4))
我想检测color
何时切换每个'试用'。像这样:
color trial swtch
1 G 1 0
2 G 1 0
3 G 1 0
4 R 2 1
5 R 2 1
6 R 2 1
7 R 3 0
8 R 3 0
9 R 3 0
10 R 3 0
11 G 4 1
12 G 4 1
我知道如何使用for
循环完成此操作。但有没有一种简单的方法可以在R中实现这一点。我想也许ave
函数可能会有用。
答案 0 :(得分:3)
这里有点不同:
x <- interaction(dat,drop=TRUE)
x <- factor(x, levels=unique(x))
levels(x)[] <- 0:1
dat$swtch <- x
# color trial swtch
#1 G 1 0
#2 G 1 0
#3 G 1 0
#4 R 2 1
#5 R 2 1
#6 R 2 1
#7 R 3 0
#8 R 3 0
#9 R 3 0
#10 R 3 0
#11 G 4 1
#12 G 4 1
答案 1 :(得分:1)
我们可以使用ave
创建一个逻辑索引来比较&#39; color&#39;的相邻元素,按&#39; trial&#39;分组,然后获取cummax
with(df1, ave(c(FALSE,color[-1]!= color[-nrow(df1)]),
trial, FUN= cummax))
#[1] 0 0 0 1 1 1 0 0 0 0 1 1