R语言 根据评核人和受试者重新排列数据,同时创建新行名称

gpfsuwkq  于 2023-01-22  发布在  其他
关注(0)|答案(2)|浏览(101)

我有一个数据集,其中多个评分员对多个受试者进行评分。
我想重新排列数据,如下所示:

data <- data.frame(rater=c("A", "B", "C", "A", "B", "C"),
                   subject=c(1, 1, 1, 2, 2, 2),
                   measurment1=c(1, 2, 3, 4, 5,6),
                   measurment2=c(11, 22, 33, 44, 55,66),
                   measurment3=c(111, 222, 333, 444, 555, 666))

data
#     rater   subject  measurment1 measurment2 measurment3
# 1     A       1           1          11         111
# 2     B       1           2          22         222
# 3     C       1           3          33         333
# 4     A       2           4          44         444
# 5     B       2           5          55         555
# 6     C       2           6          66         666

转换成这样的数据

data_transformed <- data.frame( A = c(1,11,111,4,44,444),
                                B = c(2,22,222,5,55,555),
                                C = c(3,33,333,6,66,666) 
)

row.names(data_transformed) <- c("measurment1_1", "measurment2_1", "measurment3_1", "measurment1_2", "measurment2_2", "measurment3_2") 

data_transformed
#                 A   B   C
# measurment1_1   1   2   3
# measurment2_1  11  22  33
# measurment3_1 111 222 333
# measurment1_2   4   5   6
# measurment2_2  44  55  66
# measurment3_2 444 555 666

在新的数据框架中,评分者(A、B和C)应该成为列。测量应该成为行,我还想添加受试者编号作为行名称的后缀。
对于重新排列,人们可能会使用枢轴函数,但我不知道如何将测量变量与主题编号结合起来。
谢谢你的帮忙!

h7appiyu

h7appiyu1#

我们可以使用tidyr包中的pivot_longerpivot_widerunite
pivot_longer使我们的数据为垂直格式,它将测量列转换为单个变量
pivot_wider执行与pivot_longger相反的操作,将变量中的每个唯一值转换为多列

data |> 
      pivot_longer(measurment1:measurment3) |> 
      pivot_wider(names_from = rater, values_from = value, values_fill = 0 ) |> 
      unite("measure_subjet",name,subject, remove = TRUE)
k2fxgqgv

k2fxgqgv2#

请尝试下面的代码,我们可以使用pivot_longerpivot_widercolumn_to_rownames完成预期的结果。

library(tidyverse)

data_transformed <- data %>% 
  pivot_longer(c('measurment1', 'measurment2', 'measurment3')) %>% 
  mutate(rows = paste0(name, '_', subject)) %>% 
  pivot_wider(rows, names_from = rater, values_from = value) %>% 
  column_to_rownames(var = "rows")

相关问题