检测变化的变量R.

时间:2016-02-11 03:18:47

标签: r

我有一个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函数可能会有用。

2 个答案:

答案 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