【问题标题】:Rearranging data according to rater and subject, simultaneously creating new row names根据评分者和主题重新排列数据,同时创建新的行名称
【发布时间】:2023-01-18 21:05:20
【问题描述】:

我有一个数据集,其中多个评分者对多个主题进行评分。

我想重新排列如下所示的数据:

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)应成为列。测量值应成为行,我还想将主题编号添加为行名的后缀。

对于重新排列,可能可以使用枢轴函数,但我不知道如何将测量变量与主题编号结合起来。

谢谢你的帮助!

【问题讨论】:

    标签: r dataframe pivot rowname data-handling


    【解决方案1】:

    请尝试下面的代码,我们可以使用 pivot_longer 、pivot_wider 和 column_to_rownames 完成预期的结果

    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")
    

    【讨论】:

    • 奇迹般有效!谢谢!
    【解决方案2】:

    我们可以使用tidyr包中的pivot_longerpivot_wider以及dplyr中的mutate

    pivot_longer 使您的数据处于垂直格式,它将测量列转换为一个变量

    pivot_wider 与 pivot_longer 相反,将变量转换为多个列,用于变量中的每个唯一值

      data |> 
          pivot_longer(measurment1:measurment3) |> 
          pivot_wider(names_from = rater, values_from = value, values_fill = 0 ) |> 
          mutate(measure_subjet = paste(name,subject, sep = "_"), .keep = 'unused')
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-05-19
      • 1970-01-01
      • 1970-01-01
      • 2023-01-10
      • 2020-10-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多