数据帧到矩阵的行(用于邻近评级)

时间:2013-10-18 17:16:25

标签: r matrix row reshape

许多参与者(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  ....

提前感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

最简单的方法是来自“reshape2”的meltdcast

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

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