[英]How can I create a triangle of similarity judgements by multiple subjects from a data frame in R?
我有一个 dataframe 包含一些受试者做出的相似性判断,判断两个文件的相似程度。 这是df:
>dput(df)
structure(list(subject = c(5598758, 5598758, 5598758, 5598758,
5598758, 5598758, 5598758, 5598758, 5598758, 5598758, 5598758,
5598758, 5598758, 5598758, 5598758, 5598758, 5598758, 5598758,
5598758, 5598758, 5598758, 5598758, 5598758, 5598758, 5598758,
5598758, 5598758, 5598758, 5598758, 5598758, 5598758, 5598758,
5598758, 5598758, 5598758, 5598758, 5598758, 5598758, 5598758,
5598758, 5598758, 5598758, 5598758, 5598758, 5598758, 5598758,
5598758, 5598758, 5598758, 5598758, 5598758, 5598758, 5598758,
5598758, 5598758, 5598758, 5598758, 5598758, 5598758, 5598758,
5598758, 5598758, 5598758, 5598758, 5598758, 5598758, 5598758,
5598758, 5598758, 5598758, 5598758, 5598758, 5598758, 5598758,
5598758, 5598758, 5598758, 5598758, 5598778, 5598778, 5598778,
5598778, 5598778, 5598778, 5598778, 5598778, 5598778, 5598778,
5598778, 5598778, 5598778, 5598778, 5598778, 5598778, 5598778,
5598778, 5598778, 5598778, 5598778, 5598778, 5598778, 5598778,
5598778, 5598778, 5598778, 5598778, 5598778, 5598778, 5598778,
5598778, 5598778, 5598778, 5598778, 5598778, 5598778, 5598778,
5598778, 5598778, 5598778, 5598778, 5598778, 5598778, 5598778,
5598778, 5598778, 5598778, 5598778, 5598778, 5598778, 5598778,
5598778, 5598778, 5598778, 5598778, 5598778, 5598778, 5598778,
5598778, 5598778, 5598778, 5598778, 5598778, 5598778, 5598778,
5598778, 5598778, 5598778, 5598778, 5598778, 5598778, 5598778,
5598778, 5598778, 5598778, 5598778, 5598778, 5598928, 5598928,
5598928, 5598928, 5598928, 5598928, 5598928, 5598928, 5598928,
5598928, 5598928, 5598928, 5598928, 5598928, 5598928, 5598928,
5598928, 5598928, 5598928, 5598928, 5598928, 5598928, 5598928,
5598928, 5598928, 5598928, 5598928, 5598928, 5598928, 5598928,
5598928, 5598928, 5598928, 5598928, 5598928, 5598928, 5598928,
5598928, 5598928, 5598928, 5598928, 5598928, 5598928, 5598928,
5598928, 5598928, 5598928, 5598928, 5598928, 5598928, 5598928,
5598928, 5598928, 5598928, 5598928, 5598928, 5598928, 5598928,
5598928, 5598928, 5598928, 5598928, 5598928, 5598928, 5598928,
5598928, 5598928, 5598928, 5598928, 5598928, 5598928, 5598928,
5598928, 5598928, 5598928, 5598928, 5598928, 5598928), Voice1 = c("S01",
"S08", "S012", "S03", "S03", "S010", "S09", "S07", "S02", "S010",
"S03", "S01", "S05", "S012", "S08", "S011", "S07", "S05", "S06",
"S08", "S012", "S07", "S010", "S07", "S04", "S010", "S03", "S02",
"S010", "S012", "S05", "S08", "S06", "S03", "S09", "S05", "S03",
"S07", "S07", "S011", "S05", "S01", "S02", "S08", "S010", "S08",
"S011", "S010", "S08", "S04", "S02", "S06", "S04", "S09", "S02",
"S011", "S02", "S09", "S012", "S01", "S03", "S02", "S010", "S09",
"S09", "S011", "S05", "S012", "S06", "S01", "S08", "S08", "S04",
"S07", "S010", "S07", "S09", "S05", "S012", "S05", "S04", "S05",
"S06", "S012", "S011", "S09", "S08", "S08", "S07", "S02", "S07",
"S09", "S07", "S04", "S03", "S06", "S08", "S08", "S05", "S06",
"S011", "S010", "S01", "S08", "S010", "S07", "S010", "S012",
"S07", "S03", "S011", "S02", "S08", "S08", "S09", "S010", "S02",
"S07", "S012", "S03", "S010", "S02", "S05", "S01", "S02", "S09",
"S09", "S01", "S010", "S09", "S08", "S05", "S07", "S03", "S010",
"S011", "S05", "S010", "S01", "S01", "S03", "S012", "S03", "S010",
"S08", "S06", "S04", "S02", "S04", "S05", "S011", "S02", "S012",
"S07", "S09", "S03", "S03", "S012", "S05", "S09", "S011", "S02",
"S01", "S010", "S07", "S08", "S03", "S04", "S03", "S02", "S09",
"S04", "S05", "S010", "S010", "S08", "S08", "S01", "S012", "S09",
"S012", "S01", "S08", "S08", "S05", "S07", "S07", "S010", "S09",
"S06", "S011", "S09", "S010", "S07", "S01", "S04", "S06", "S05",
"S02", "S010", "S01", "S011", "S07", "S010", "S08", "S03", "S05",
"S06", "S08", "S04", "S08", "S09", "S02", "S02", "S010", "S012",
"S012", "S07", "S02", "S03", "S07", "S05", "S07", "S06", "S08",
"S09", "S012", "S03", "S02", "S011", "S03", "S010", "S011", "S05"
), Voice2 = c("S02", "S04", "S012", "S05", "S011", "S010", "S01",
"S011", "S09", "S06", "S01", "S012", "S011", "S07", "S012", "S01",
"S01", "S012", "S012", "S06", "S011", "S010", "S012", "S03",
"S03", "S09", "S03", "S06", "S01", "S03", "S08", "S011", "S07",
"S02", "S06", "S06", "S06", "S07", "S04", "S011", "S09", "S04",
"S02", "S02", "S011", "S03", "S09", "S08", "S08", "S06", "S011",
"S06", "S04", "S07", "S07", "S04", "S05", "S03", "S04", "S05",
"S010", "S04", "S05", "S04", "S012", "S06", "S04", "S02", "S01",
"S01", "S01", "S09", "S010", "S08", "S02", "S05", "S09", "S05",
"S07", "S011", "S06", "S08", "S06", "S011", "S011", "S01", "S03",
"S012", "S07", "S02", "S08", "S04", "S04", "S03", "S01", "S01",
"S011", "S04", "S05", "S07", "S06", "S01", "S01", "S01", "S09",
"S011", "S011", "S012", "S01", "S03", "S09", "S09", "S08", "S09",
"S012", "S012", "S07", "S010", "S02", "S05", "S06", "S05", "S04",
"S04", "S04", "S07", "S09", "S02", "S010", "S03", "S06", "S09",
"S03", "S010", "S05", "S04", "S012", "S08", "S012", "S05", "S06",
"S04", "S011", "S02", "S02", "S012", "S04", "S011", "S010", "S06",
"S01", "S06", "S03", "S05", "S06", "S02", "S03", "S04", "S08",
"S04", "S01", "S011", "S012", "S02", "S01", "S04", "S01", "S04",
"S06", "S05", "S012", "S03", "S011", "S012", "S06", "S012", "S09",
"S01", "S02", "S06", "S012", "S04", "S011", "S08", "S04", "S08",
"S05", "S08", "S09", "S06", "S09", "S03", "S011", "S07", "S02",
"S010", "S012", "S09", "S04", "S010", "S05", "S011", "S03", "S09",
"S06", "S010", "S05", "S01", "S02", "S06", "S01", "S07", "S09",
"S06", "S01", "S03", "S011", "S010", "S02", "S02", "S04", "S012",
"S011", "S07", "S03", "S01", "S07", "S05", "S07", "S06", "S011",
"S05", "S04", "S06"), response = c(3, 1, 9, 3, 3, 7, 5, 2, 6,
7, 7, 6, 5, 4, 2, 8, 3, 2, 3, 4, 4, 3, 2, 3, 1, 4, 9, 4, 4, 4,
1, 3, 2, 6, 8, 7, 1, 8, 1, 8, 7, 9, 1, 8, 7, 3, 5, 5, 1, 9, 8,
5, 2, 5, 6, 9, 9, 6, 9, 6, 2, 8, 6, 8, 7, 6, 9, 9, 1, 3, 7, 6,
8, 9, 5, 8, 1, 1, 9, 2, 9, 9, 1, 6, 1, 5, 3, 9, 1, 1, 7, 9, 8,
9, 6, 1, 8, 9, 1, 5, 6, 8, 1, 4, 4, 9, 3, 1, 9, 1, 3, 7, 1, 9,
9, 9, 9, 9, 9, 9, 4, 9, 9, 9, 9, 7, 1, 7, 1, 9, 3, 9, 9, 3, 9,
9, 9, 9, 4, 9, 3, 5, 3, 3, 7, 9, 1, 8, 4, 7, 9, 3, 8, 9, 9, 6,
1, 6, 7, 6, 7, 7, 3, 8, 5, 8, 7, 1, 6, 9, 2, 8, 7, 8, 3, 6, 4,
1, 7, 2, 1, 9, 3, 1, 9, 8, 9, 7, 1, 1, 4, 6, 2, 1, 8, 9, 9, 9,
6, 1, 8, 1, 6, 4, 3, 1, 1, 3, 5, 9, 9, 5, 7, 6, 4, 7, 3, 6, 1,
5, 3, 5, 7, 3, 1, 2, 4, 8, 8, 7, 5, 9, 9, 7), Spreadsheet = c("Order1",
"Order1", "Order1", "Order1", "Order1", "Order1", "Order1", "Order1",
"Order1", "Order1", "Order1", "Order1", "Order1", "Order1", "Order1",
"Order1", "Order1", "Order1", "Order1", "Order1", "Order1", "Order1",
"Order1", "Order1", "Order1", "Order1", "Order1", "Order1", "Order1",
"Order1", "Order1", "Order1", "Order1", "Order1", "Order1", "Order1",
"Order1", "Order1", "Order1", "Order1", "Order1", "Order1", "Order1",
"Order1", "Order1", "Order1", "Order1", "Order1", "Order1", "Order1",
"Order1", "Order1", "Order1", "Order1", "Order1", "Order1", "Order1",
"Order1", "Order1", "Order1", "Order1", "Order1", "Order1", "Order1",
"Order1", "Order1", "Order1", "Order1", "Order1", "Order1", "Order1",
"Order1", "Order1", "Order1", "Order1", "Order1", "Order1", "Order1",
"Order1", "Order1", "Order1", "Order1", "Order1", "Order1", "Order1",
"Order1", "Order1", "Order1", "Order1", "Order1", "Order1", "Order1",
"Order1", "Order1", "Order1", "Order1", "Order1", "Order1", "Order1",
"Order1", "Order1", "Order1", "Order1", "Order1", "Order1", "Order1",
"Order1", "Order1", "Order1", "Order1", "Order1", "Order1", "Order1",
"Order1", "Order1", "Order1", "Order1", "Order1", "Order1", "Order1",
"Order1", "Order1", "Order1", "Order1", "Order1", "Order1", "Order1",
"Order1", "Order1", "Order1", "Order1", "Order1", "Order1", "Order1",
"Order1", "Order1", "Order1", "Order1", "Order1", "Order1", "Order1",
"Order1", "Order1", "Order1", "Order1", "Order1", "Order1", "Order1",
"Order1", "Order1", "Order1", "Order1", "Order1", "Order1", "Order1",
"Order1", "Order1", "Order1", "Order1", "Order1", "Order1", "Order1",
"Order1", "Order1", "Order1", "Order1", "Order1", "Order1", "Order1",
"Order1", "Order1", "Order1", "Order1", "Order1", "Order1", "Order1",
"Order1", "Order1", "Order1", "Order1", "Order1", "Order1", "Order1",
"Order1", "Order1", "Order1", "Order1", "Order1", "Order1", "Order1",
"Order1", "Order1", "Order1", "Order1", "Order1", "Order1", "Order1",
"Order1", "Order1", "Order1", "Order1", "Order1", "Order1", "Order1",
"Order1", "Order1", "Order1", "Order1", "Order1", "Order1", "Order1",
"Order1", "Order1", "Order1", "Order1", "Order1", "Order1", "Order1",
"Order1", "Order1", "Order1", "Order1", "Order1", "Order1", "Order1",
"Order1", "Order1", "Order1", "Order1", "Order1", "Order1", "Order1",
"Order1", "Order1")), row.names = c(NA, -234L), class = c("tbl_df",
"tbl", "data.frame"))
我想创建以下排序的相似矩阵三角形(来自不同的数据集):
# A tibble: 12 x 13
subject Voice S01 S02 S03 S04 S05 S06 S07 S08 S09 S010 S011 S012
<dbl> <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1 5456381 S01 1 NA NA NA NA NA NA NA NA NA NA NA
2 5456381 S02 8 1 NA NA NA NA NA NA NA NA NA NA
3 5456381 S03 8 2 1 NA NA NA NA NA NA NA NA NA
4 5456381 S04 7 9 7 1 NA NA NA NA NA NA NA NA
5 5456381 S05 8 9 9 7 1 NA NA NA NA NA NA NA
6 5456381 S06 3 7 3 8 6 1 NA NA NA NA NA NA
7 5456381 S07 7 9 8 7 8 7 1 NA NA NA NA NA
8 5456381 S08 7 4 2 9 9 3 9 1 NA NA NA NA
9 5456381 S09 1 4 9 8 8 2 4 4 1 NA NA NA
10 5456381 S010 6 5 2 8 8 6 4 2 5 1 NA NA
11 5456381 S011 4 6 3 6 7 6 6 3 6 2 2 NA
12 5456381 S012 7 9 8 4 7 4 2 8 7 8 3 1
但我希望按主题在数据框中堆叠几个此类三角形。
我尝试了以下代码:
tri<-order1%>%
pivot_wider(names_from = Voice2,values_from=response, names_sort=TRUE)
这给了我以下内容:
# A tibble: 192 x 15
subject Voice1 Spreadsheet S01 S010 S011 S012 S02 S03 S04 S05 S06 S07 S08 S09
<dbl> <chr> <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1 5598758 S01 Order1 3 NA NA 6 3 NA 9 6 NA NA NA NA
2 5598758 S08 Order1 7 NA 3 2 8 3 1 NA 4 NA 1 6
3 5598758 S012 Order1 NA NA 4 9 9 4 9 NA NA 4 NA NA
4 5598758 S03 Order1 7 2 3 NA 6 9 NA 3 1 NA NA NA
5 5598758 S010 Order1 4 7 7 2 5 NA NA 6 7 NA 5 4
6 5598758 S09 Order1 5 NA NA 7 NA 6 8 NA 8 5 NA 1
7 5598758 S07 Order1 3 3 2 NA NA 3 1 8 NA 8 9 NA
8 5598758 S02 Order1 NA NA 8 NA 1 NA 8 9 4 6 NA 6
9 5598758 S05 Order1 NA NA 5 2 NA NA 9 1 7 NA 1 7
10 5598758 S011 Order1 8 NA 8 NA NA NA 9 NA 6 NA NA 5
# ... with 182 more rows
我怎样才能做到这一点,以便我为数据框中堆叠的每个主题都有一个下三角形?
蒂亚!
像这样的东西:
library(tidyverse)
df |>
mutate(voiceOrd = as.numeric(substring(Voice1, 3, 5))) |>
arrange(voiceOrd) |>
pivot_wider(names_from = Voice2,
values_from = response, names_sort = TRUE) |>
relocate(c("S010", "S011", "S012"), .after = "S09") |>
arrange(subject, voiceOrd) |>
select(-voiceOrd, -Spreadsheet)
#> # A tibble: 36 × 14
#> subject Voice1 S01 S02 S03 S04 S05 S06 S07 S08 S09 S010
#> <dbl> <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
#> 1 5598758 S01 3 3 NA 9 6 NA NA NA NA NA
#> 2 5598758 S02 NA 1 NA 8 9 4 6 NA 6 NA
#> 3 5598758 S03 7 6 9 NA 3 1 NA NA NA 2
#> 4 5598758 S04 NA NA 1 2 NA 9 NA NA NA 8
#> 5 5598758 S05 NA NA NA 9 1 7 NA 1 7 NA
#> 6 5598758 S06 1 NA NA NA NA 5 2 NA NA NA
#> 7 5598758 S07 3 NA 3 1 8 NA 8 9 NA 3
#> 8 5598758 S08 7 8 3 1 NA 4 NA 1 6 NA
#> 9 5598758 S09 5 NA 6 8 NA 8 5 NA 1 NA
#> 10 5598758 S010 4 5 NA NA 6 7 NA 5 4 7
#> # … with 26 more rows, and 2 more variables: S011 <dbl>, S012 <dbl>
由代表 package (v2.0.1) 于 2022 年 2 月 6 日创建
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.