Проверьте, не перекрываются ли несколько столбцов по волнам в R - PullRequest
1 голос
/ 08 мая 2020

У меня есть набор данных о подростках старше 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            

Таким образом, переменные «согласованности» волны 2 должны выглядеть следующим образом (0 отсутствует в предыдущей волне 1, присутствует в предыдущей волне, NA, если они не выдвинули кого-то в волне 2):

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

1 Ответ

0 голосов
/ 08 мая 2020

Этот ответ в Base-R возвращает матрицу с идентификатором student_id в качестве строк и номером волны в качестве столбцов:

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

или вы можете предпочесть указать фактические идентификаторы, и в этом случае добавьте эту строку в конец:

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
...