0

我有数据,其中学生在多个问题上分别由两名评分者进行评分。每行包含以下变量:

  • 学生卡,
  • 第一个项目的第一个评估者的 ID
  • 第一个评分者对第一个项目的评分,
  • 第一个项目的第二个评估者的 ID
  • 第二个评分者对第一个项目的评分

....然后重复多个项目。

它看起来像这样:

Student_ID  <- c(1:4)
Item1_first_rater_id <- c(1,2,1,2)
Item1_first_rating <- c(2,3,4,2)
Item1_second_rater_id <- c(2,3,2,3)
Item1_second_rating <- c(4,5,3,2)
Item2_first_rater_id <- c(4,2,5,1)
Item2_first_rating <- c(2,3,4,2)
Item2_second_rater_id <- c(6,7,2,3)
Item2_second_rating <- c(3,4,5,4)

wide <- data.frame(Student_ID, Item1_first_rater_id, Item1_first_rating, 
                          Item1_second_rater_id, Item1_second_rating, 
                          Item2_first_rater_id, Item2_first_rating, 
                          Item2_second_rater_id, Item2_second_rating)

我需要数据是这样的长格式:

Student_ID  <- c(1:4)
Item_number <- c(1,1,2,2)
Rater_id <- c(1:4)
Score <- c(2,3,4,5)
long <- data.frame(Student_ID, Item_number, Rater_id, Score)

关于如何重塑的任何想法?

谢谢。

4

1 回答 1

1

您要做什么并不完全清楚(换句话说,您希望如何转换源数据)。这是一个至少可以让你更接近你想要的输出的猜测。

似乎names您的“宽”数据集中包含三组信息:(1)项目编号,(2)“时间”(第一或第二),以及(3)另一个变量(“评级”或“评分者” ID”)。

我们可以使用meltcolsplitdcast来促进我们的重塑。

第 1 步:melt数据集

library(reshape2)
orignames <- names(wide) # Store the original names so we can replace them
names(wide) <- gsub("Item([0-9])_(.*)_(rater_id|rating)", 
                    "\\1\\.\\2\\.\\3", names(wide))
# "melt" the dataset
m.wide <- melt(wide, id.vars="Student_ID")
head(m.wide)
#   Student_ID         variable value
# 1          1 1.first.rater_id     1
# 2          2 1.first.rater_id     2
# 3          3 1.first.rater_id     1
# 4          4 1.first.rater_id     2
# 5          1   1.first.rating     2
# 6          2   1.first.rating     3

第 2 步:使用创建新列colsplit

m.wide <- cbind(m.wide, 
                colsplit(m.wide$variable, "\\.", 
                         c("Item", "Time", "Var")))
head(m.wide)
#   Student_ID         variable value Item  Time      Var
# 1          1 1.first.rater_id     1    1 first rater_id
# 2          2 1.first.rater_id     2    1 first rater_id
# 3          3 1.first.rater_id     1    1 first rater_id
# 4          4 1.first.rater_id     2    1 first rater_id
# 5          1   1.first.rating     2    1 first   rating
# 6          2   1.first.rating     3    1 first   rating

第 3 步:dcast用于重塑数据

dcast(m.wide, Student_ID + Item ~ Time + Var, value.var="value")
#   Student_ID Item first_rater_id first_rating second_rater_id second_rating
# 1          1    1              1            2               2             4
# 2          1    2              4            2               6             3
# 3          2    1              2            3               3             5
# 4          2    2              2            3               7             4
# 5          3    1              1            4               2             3
# 6          3    2              5            4               2             5
# 7          4    1              2            2               3             2
# 8          4    2              1            2               3             4

切换左侧和右侧的内容~会影响数据的“形状”。

于 2013-06-11T09:28:21.480 回答