检查R中多列波的重叠情况

问题描述 投票:1回答:1

我有一个青少年的数据集,有5波。在每一波数据中,他们最多提名3个朋友。我想添加一些变量来表示每个朋友是否在前一波的数据收集中被提名。

我的数据看起来像这个样本。

student_id    wave       friend1_id    friend2_id       friend3_id        
1             1          3             NA               NA           
2             1          5             2                3            
3             1          2             4                5            
4             1          1             6                NA           
5             1          1             NA               6            
6             1          5             NA               2            
7             1          8             NA               NA           
8             1          NA            9                NA           
9             1          8             7                NA           
10            1          7             9                NA  
1             2          4             NA               NA            
2             2          5             3                NA             
3             2          NA            NA               5            
4             2          NA            NA               NA           
5             2          6             NA               NA            
6             2          5             NA               NA             
7             2          10            1                3           
8             2          9             NA               NA           
9             2          8             6                7           
10            2          7             4                NA            

所以第二波 "一致性 "变量应该是这样的 (0代表在前一波中没有出现过 1代表在前一波中出现过 如果他们在第二波中没有提名过某人 那就是NA)

student_id    wave    friend1_consit    friend2_consit    friend3_consit
1             2       0                 NA                NA
2             2       1                 1                 NA
3             2       NA                NA                1 
4             2       NA                NA                NA
5             2       1                 NA                NA       
6             2       1                 NA                NA
7             2       0                 0                 0
8             2       1                 NA                NA
9             2       1                 2                 1
10            2       1                 0                NA
r loops dplyr data-manipulation sapply
1个回答
0
投票

这个答案在 Base-R 返回一个矩阵,行是student_id,列是wave#。

votes_bywave <- split(df1[,3:5],df1$wave)
votes_bywave <- lapply(votes_bywave, function(x) unique(unlist(x))) 
votes_bywave <- sapply(votes_bywave, function(x) unique(df1$student_id) %in% x )

    > votes_bywave
          1     2
 [1,]  TRUE  TRUE
 [2,]  TRUE FALSE
 [3,]  TRUE  TRUE
 [4,]  TRUE  TRUE
 [5,]  TRUE  TRUE
 [6,]  TRUE  TRUE
 [7,]  TRUE  TRUE
 [8,]  TRUE  TRUE
 [9,]  TRUE  TRUE
[10,] FALSE  TRUE

或者你可能更喜欢列出实际的ID,在这种情况下,在最后添加这一行。

cbind(student_id = unique(df1$student_id), votes_bywave)

      student_id 1 2
 [1,]          1 1 1
 [2,]          2 1 0
 [3,]          3 1 1
 [4,]          4 1 1
 [5,]          5 1 1
 [6,]          6 1 1
 [7,]          7 1 1
 [8,]          8 1 1
 [9,]          9 1 1
[10,]         10 0 1
© www.soinside.com 2019 - 2024. All rights reserved.