如何在R语言中按评分者与受试者重排数据集并设置自定义行名
数据重排解决方案:评分者转列,测量指标+受试者为行名
原始数据
首先构造并查看原始数据集:
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
转换需求
需要将数据转换为以下格式:
- 列:评分者(A、B、C)
- 行名:测量指标+受试者编号(如
measurment1_1)
目标格式示例:
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
实现代码
使用tidyverse包中的dplyr和tidyr工具完成转换,步骤如下:
- 加载依赖包
library(tidyverse)
- 链式操作完成数据转换
data_transformed <- data %>% # 将宽格式的测量指标转为长格式 pivot_longer(cols = starts_with("measurment"), names_to = "measurement", values_to = "value") %>% # 将评分者转为列 pivot_wider(names_from = rater, values_from = value) %>% # 合并测量指标和受试者编号,生成行名字符串 mutate(row_id = paste(measurement, subject, sep = "_")) %>% # 调整列顺序,把行名列放在最前 select(row_id, A, B, C) %>% # 将row_id列转为行名,并移除该列 column_to_rownames(var = "row_id")
- 查看转换结果
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
内容的提问来源于stack exchange,提问作者Linus
相关产品推荐
相关产品推荐

