根据r中数据框中的其他变量替换变量上的值



我有一个长格式的重复测量数据集,类似于:

ID     Stimuli  Score   Correct
<fct>    <chr>   <int>   <int>
1 1          A1     0.046    1
2 1          A1     0.037    1          
3 1          A2    -0.261    0      
4 1          A2     0.213    0     
5 1          A3     0.224    0          
6 1          A3     0.001    1        
7 2          A1     -1.38    0         
8 2          A1     -0.81    0
9 2          A2     -0.03    1  
10 2          A2      0.88    0  
11 2          A3     -0.00    1      
12 2          A3      0.49    0  

我根据每行的Score是否在特定范围内(如果Score介于-之间)创建了Correct变量。10和+。10 = 1,否则为0)。

我现在想要的是改变CorrectStimuli中每个刺激(A1, A2, A3)和每个ID数字的值。具体来说,Correct的任何一行出现1时,所有值都应该变为1,但仅针对相应的刺激和ID换句话说,在上面的例子中,Correct的第1-2行保持不变(1,1),第3-4行保持不变(0,0),但StimuliA3的第5-6行仅为ID1的1。对于ID 2,唯一的变化是刺激A2(应该变成1,1)。

我已经尝试了几种方法,但我想不出一个简单的方法来做到这一点。有关于替换数据帧中的值的类似帖子,但还没有看到一个我可以通过在同一数据帧内的其他变量中的特定值来做到这一点。

您可以尝试将dplyr::group_byany(Correct == 1)一起使用

library(dplyr)
df %>%
group_by(ID, Stimuli) %>% 
mutate(Correct = +any(Correct == 1))
#------
ID Stimuli  Score Correct
<int> <chr>    <dbl>   <dbl>
1     1 A1       0.046       1
2     1 A1       0.037       1
3     1 A2      -0.261       0
4     1 A2       0.213       0
5     1 A3       0.224       1
6     1 A3       0.001       1
7     2 A1      -1.38        0
8     2 A1      -0.81        0
9     2 A2      -0.03        1
10     2 A2       0.88        1
11     2 A3       0           1
12     2 A3       0.49        1

数据
df <- structure(list(ID = c(1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 
2L, 2L), Stimuli = c("A1", "A1", "A2", "A2", "A3", "A3", "A1", 
"A1", "A2", "A2", "A3", "A3"), Score = c(0.046, 0.037, -0.261, 
0.213, 0.224, 0.001, -1.38, -0.81, -0.03, 0.88, 0, 0.49), Correct = c(1L, 
1L, 0L, 0L, 0L, 1L, 0L, 0L, 1L, 0L, 1L, 0L)), class = "data.frame", row.names = c("1", 
"2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12"))

应该也可以,只要

library(dplyr)
df %>%
group_by(ID, Stimuli) %>% 
mutate(Correct = max(Correct))

相关内容

  • 没有找到相关文章