【发布时间】:2016-05-15 21:12:10
【问题描述】:
我正在尝试将具有 3 列的 CSV 转换为弧形图。列 - A、B、C 始终按 A -> B -> C 的顺序排列。但是,我没有看到将其实现为弧图的方法,因为似乎大多数方法都使用了两列边缘图。因此,我一直按照说明here 转换为邻接矩阵。
我将在下面重新创建问题 - 但不生成虚假数据,因为一个问题是 CSV 可能无法正确读取。
基本上,CSV 包含行,其中每一列由, 分隔,但可能包含多个由; 分隔的值,例如:
ENV;MO,echoic;tact,social ENV;MO,mand,physical OVB,intraverbal,social ENV;OVB,tact,social OVB,intraverbal;tact,social OVB;ENV;MO,intraverbal;mand,social OVB;ENV;MO,intraverbal;mand,physical;social ENV;MO,mand,social;physical
我正在尝试以下操作,以便在移动到弧形图之前完成一些网络绘图:
options(stringsAsFactors = F)
lst <- read.csv("abc.csv", header=FALSE)
#this is pretty much straight from the link above
d <- do.call(rbind, lst)
edges <- rbind(d[ ,1:2], d[ ,2:3])
g <- graph.data.frame(edges, directed=TRUE)
adj <- as.matrix(get.adjacency(g))
g2 <- new("graphAM", adjMat=adj, edgemode="directed")
plot(g2, attrs = list(graph = list(rankdir="LR"), node = list(fillcolor = "lightblue")))
结果几乎不是我所希望的。而不是来自A 列的元素指向B 指向C。相反,它只是 A 指向自身的一个元素;来自B 的一个指向另一个指向另一个,例如intraverbal -> mand -> intraverbal; tact,一个来自C,指向自身,另一个来自C。
附录:给定A -> B -> C 格式,一行如
OVB;ENV;MO,intraverbal;mand,social
表示
A(OVB&ENV&MO) -> B(intraverbal&mand) -> C(social)
虽然它可能超出了问题的范围,但最终目标将是类似于此处描述的弧形图 PDF guide to arcplots in R
【问题讨论】:
-
不确定用“;”分隔的多个值...例如第一行应该变成:
ENV->echoic->social + ENV->tact->social + MO->echoic->social + MO->tact->social对吗? -
应该是 ENV/MO -> echoic/tact -> social A 列有 ENV、MO 或 OVB 的某种组合; B 列是机智、命令、回声或口头语言的某种组合; C 栏社会,身体,或社会/身体或身体/社会。 FWIW 替换 ';'使用 '-' 给出相同的结果
-
FWIW - 我刚刚发现换行符有问题!我使用了 dos2unix 并在每个列值周围添加了引号。我会看看这是否有帮助。
标签: r graph social-networking