在R中将一个数据帧转换为多个图
我有一个在R中将一个数据帧转换为多个图,r,data-manipulation,R,Data Manipulation,我有一个data.frame,看起来像这样: row.names id actor event time end 4427 1494 Locke23rus merged 1 1 4428 1494 Locke23rus closed 1 1 4429 1494 Locke23rus referenced 1 1 4492 1397 brixe
data.frame
,看起来像这样:
row.names id actor event time end
4427 1494 Locke23rus merged 1 1
4428 1494 Locke23rus closed 1 1
4429 1494 Locke23rus referenced 1 1
4492 1397 brixen discussed 2 2
4493 1397 brixen closed 2 2
...
可以找到完整的数据集。接下来,加载数据和库:
dat <- my data # i.e. the data above
library(plyr)
library(network)
所以我跑:
graph_list <- dlply(dat, .(id), .fun=makeNetwork)
如何正确创建图形对象列表?以下是如何使其正常工作:
# Make a raw graph dataset
makeNetworkData <- function(dat)
{
dat2 <- ddply(dat, .(id), function(d){
data.frame(
event = d$event[-1],
from = d$actor[-NROW(d)],
to = d$actor[-1],
time = paste(d$time[-NROW(d)], d$time[-1], sep = "-")
)
})
}
# apply function to make a list
graph_list <- dlply(dat, .(id), makeNetworkData)
# delete all data.frames (entries in the list) where nrow()=0
nr <- sapply(graph_list, nrow)
graph_list <- graph_list[nr > 0]
makeNetworkGraph <- function(graph_list){
output <- as.network(graph_list[, 3:4], loops = TRUE)
(output)
}
# Turn raw data in list to graph objects
graph_objects <- llply(graph_list, makeNetworkGraph)
# apply any SNA statistic to all entries in the list
hierarchy_list <- llply(graph_objects, hierarchy, measure="krackhardt")
#创建原始图形数据集
将as.network
中的NetworkData定义为函数?或者它来自一个软件包?库(网络)
-更新了代码,对此很抱歉。安装.packages(“网络”)
可能就像将生成代码包装到函数中一样简单(比如,makeNetwork
),然后执行dlply(dat,.(id),.fun=makeNetwork)
?哪个将按公共id进行拆分并在列表中返回结果?(没有尝试过,但这是我会采取的方法;cld也使用by
但您已经在使用plyr
函数)您可以只做lappy(split(dat,dat$id),as.network)
?
graph_list <- dlply(dat, .(id), .fun=makeNetwork)
Error in `[.data.frame`(dat2, "from") : undefined columns selected
# Make a raw graph dataset
makeNetworkData <- function(dat)
{
dat2 <- ddply(dat, .(id), function(d){
data.frame(
event = d$event[-1],
from = d$actor[-NROW(d)],
to = d$actor[-1],
time = paste(d$time[-NROW(d)], d$time[-1], sep = "-")
)
})
}
# apply function to make a list
graph_list <- dlply(dat, .(id), makeNetworkData)
# delete all data.frames (entries in the list) where nrow()=0
nr <- sapply(graph_list, nrow)
graph_list <- graph_list[nr > 0]
makeNetworkGraph <- function(graph_list){
output <- as.network(graph_list[, 3:4], loops = TRUE)
(output)
}
# Turn raw data in list to graph objects
graph_objects <- llply(graph_list, makeNetworkGraph)
# apply any SNA statistic to all entries in the list
hierarchy_list <- llply(graph_objects, hierarchy, measure="krackhardt")