许多参与者(p1,p2,...)给出了4个单词(w1.w2,w1.w3,...,w3.w4)的所有成对组合的接近等级,给出了以下数据框: / p>
id w1.w2 w1.w3 w1.w4 w2.w3 w2.w4 w3.w4
p1 3 1 6 3 5 2
p2 2 3 5 1 6 1
p3 .....
我想将这些评级转换为一系列矩阵,以便对它们应用多维缩放(参与者为1个矩阵)。
我想将我的数据转换为以下格式:
id first.wd.in.pair w2 w3 w4
p1 w1 3 1 6
p1 w2 3 5
p1 w3 2
p2 w1 2 3 5
p2 w2 1 6
p2 w3 1
p3 .....
我查看了各种重新格式化选项(例如cast
中的reshape2
),但似乎没有任何内容适合我的问题。
我还查看了邻接矩阵的函数(例如get.adjacency()
中的igraph
,但从我看到它似乎需要以下格式的东西:
id first.word second.word rating
p1 w1 w2 3
p1 w1 w3 1
p1 w1 w4 6
p1 ....
提前感谢您的帮助!
答案 0 :(得分:1)
最简单的方法是来自“reshape2”的melt
和dcast
。
我不知道你尝试了什么,但除了一步之外,它是非常标准的程序:拆分熔化的“变量”列。假设您的输入data.frame
被称为“mydf”:
dfL <- melt(mydf, id.vars="id")
dfL <- cbind(dfL, colsplit(dfL$variable, "\\.", c("first", "other")))
dcast(dfL, id + first ~ other, value.var="value", fill=0)
# id first w2 w3 w4
# 1 p1 w1 3 1 6
# 2 p1 w2 0 3 5
# 3 p1 w3 0 0 2
# 4 p2 w1 2 3 5
# 5 p2 w2 0 1 6
# 6 p2 w3 0 0 1
这里,“mydf”定义为:
mydf <- structure(list(id = c("p1", "p2"), w1.w2 = c(3L, 2L), w1.w3 = c(1L,
3L), w1.w4 = c(6L, 5L), w2.w3 = c(3L, 1L), w2.w4 = 5:6, w3.w4 = c(2L,
1L)), .Names = c("id", "w1.w2", "w1.w3", "w1.w4", "w2.w3", "w2.w4",
"w3.w4"), class = "data.frame", row.names = c(NA, -2L))
请将来以这种格式分享您的样本数据。