在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")