0

许多参与者(p1,p2,...)对 4 个单词(w1.w2,w1.w3,...,w3.w4)的所有成对组合给出了接近度评分,给出了以下数据框:

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 .....

我研究了各种重新格式化选项(例如castin reshape2),但似乎没有什么适合我的问题。
我还查看了邻接矩阵的函数(例如get.adjacency()in igraph,但据我所见,它似乎需要以下格式的内容:

id    first.word   second.word   rating
p1            w1            w2        3  
p1            w1            w3        1  
p1            w1            w4        6  
p1  ....

提前感谢您的帮助!

4

1 回答 1

1

melt最简单的方法是dcast“reshape2”。

我不知道您尝试了什么,但这是非常标准的程序,除了一个步骤:拆分熔化的“变量”列。假设您的输入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))

以后请以这种格式分享您的样本数据。

于 2013-10-18T17:35:10.303 回答