0

我想获得一个lastocc值为 1 和 2 的新变量。lastocc如果每个单词的最后一次出现也以相同的颜色显示,则该变量应显示为每个单词。

因此,如果特定单词现在和以前以相同的颜色显示,则应将其编码为 1。如果在最后一次出现时以不同的颜色显示,则应将其编码为 2。

例如:

trial      word   color  lastocc
1          warm   red
2          klein  blue
3          ganz   yellow
4          warm   red      1
5          klein  red      2 
6          ganz   yellow   1
7          klein  red      1    

我尝试了这段代码,但它不起作用:

data_expblocks$lastocc <- if (data_expblocks$word == TRUE & data_expblocks$color == TRUE) {lastocc = 1}  
 else { lastocc =2 }

更高级的是 dput() =

structure(list(Subject = c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L), Word = c("XXXX", "XXXX", "warm", "klein", "klein", "warm", 
"ganz", "warm", "leicht", "ganz"), Colour = c("YELLOW", "RED", 
"RED", "RED", "RED", "RED", "RED", "YELLOW", "RED", "YELLOW")), row.names = 53:62, class = "data.frame")

如果你能给我一些建议就好了。谢谢你!

4

1 回答 1

0

这是使用dplyr包的一种方法。

首先,用于group_by查看给定主题的每个单词。行之间的唯一区别应该是Colour.

然后,您可以使用它mutate来创建一个新列。使用ifelseis 将评估Colour给定行的 是否与上一个相同Colour。如果是,则值为 1。如果不是,则为 2。如果没有可用的先前值(第一次出现单词),则为NA

library(dplyr)

data_expblocks %>%
  group_by(Subject, Word) %>%
  mutate(lastocc = ifelse(Colour == lag(Colour), 1, 2))

输出

   Subject Word   Colour lastocc
     <int> <chr>  <chr>    <dbl>
 1       1 XXXX   YELLOW      NA
 2       1 XXXX   RED          2
 3       1 warm   RED         NA
 4       1 klein  RED         NA
 5       1 klein  RED          1
 6       1 warm   RED          1
 7       1 ganz   RED         NA
 8       1 warm   YELLOW       2
 9       1 leicht RED         NA
10       1 ganz   YELLOW       2
于 2021-01-19T15:56:39.777 回答