我有一个数据集,其中多次收集参与者 (ID) 的数据。如果它们具有相同的变量,是否可以通过 ID 组合它们的数据?我希望将数据折叠为每个 ID 一行。
看起来像这样,但我正在处理大约 100 多个变量:
id<-c(1,1,1,1,2,2,2,3,3,3,4,4,4,4)
age<-c(19,NA,NA,NA,52,NA,NA,22,NA,NA,36,NA,NA,NA)
values<-c(9,9,9,9,9,8,8,8,8,6,8,7,7,7)
acceptance<-c(8,8,7,6,9,7,5,8,8,5,8,7,6,5)
diffusion<-c(9,8,7,6,9,9,9,9,8,5,9,8,8,5)
attitudes<-c(7,7,6,6,9,7,7,8,8,8,9,6,3,3)
df<-data.frame(id,age,values,acceptance,diffusion,attitudes)
id age values acceptance diffusion attitudes
1 1 19 9 8 9 7
2 1 NA 9 8 8 7
3 1 NA 9 7 7 6
4 1 NA 9 6 6 6
5 2 52 9 9 9 9
6 2 NA 8 7 9 7
7 2 NA 8 5 9 7
8 3 22 8 8 8 8
9 3 NA 8 8 5 8
10 3 NA 6 5 9 8
11 4 36 8 8 9 9
12 4 NA 7 7 8 6
13 4 NA 7 7 8 3
14 4 NA 7 5 5 3
这些分数(值、接受度等)是在干预之前和之后收集的几次,但如果可能的话,我希望将所有这些都折叠在一个 ID 下。
期望的输出:
id age values acceptance diffusion attitudes
1 1 19 9,9,9,9 8,8,7,6 9,8,7,6 7,7,6,6
2 2 52 9,8,8 9,7,5 9,9,9 9,7,7
3 3 22 8,8,6 8,8,5 8,5,9 8,8,8
4 4 36 8,7,7,7 8,7,7,5 9,8,8,5 9,6,3,3
我还没有遇到过类似问题的帖子,我不确定是否可以在 R 上这样做,因此我们将不胜感激!谢谢!
fill
在NA
价值观age
和每个id
并age
用折叠值toString
。
library(dplyr)
library(tidyr)
df %>%
fill(age) %>%
group_by(id, age) %>%
summarise(across(.fns = toString), .groups = 'drop')
# id age values acceptance diffusion attitudes
# <dbl> <dbl> <chr> <chr> <chr> <chr>
#1 1 19 9, 9, 9, 9 8, 8, 7, 6 9, 8, 7, 6 7, 7, 6, 6
#2 2 52 9, 8, 8 9, 7, 5 9, 9, 9 9, 7, 7
#3 3 22 8, 8, 6 8, 8, 5 9, 8, 5 8, 8, 8
#4 4 36 8, 7, 7, 7 8, 7, 6, 5 9, 8, 8, 5 9, 6, 3, 3
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句