创建多个网络并在 R 中循环它们
Creating multiple networks and looping over them in R
我目前正在研究公司联锁,我想分析他们在不同年份之间的联系。到目前为止,我已经调查了我的数据并创建了一个具有多个属性的边缘列表,其中之一是它们连接的时间。这是一些示例数据:
sample <- data.frame(ID = 1:8, org_ID = c(5,4,1,2,2,2,5,7), mon = c("1998m1", "1998m2","1998m2","1998m2","1999m4","1999m12","2000m1", "2000m12"))
library(igraph)
我使用 grep 命令将数据分组为年份,因为这将是我分析的基础:
yr1998 <- grep('1998', unique(sample$mon), value=TRUE)
yr1999 <- grep('1999', unique(sample$mon), value=TRUE)
yr2000 <- grep('2000', unique(sample$mon), value=TRUE)
我的原始数据包含15年,我将计算多个度量。我想创建一个循环,下面显示的代码将在分析中经历所有年份,从 1998 年到 2012 年。我猜如果我的总体思路正确,我可以添加更多度量并绘制我的图表而无需重写每次都是这样——据我所知,这是循环背后的原理,听起来非常方便。 :-)
##Create graph per year:
# 1998
df.1998 <- sample[sample$mon %in% yr1998,]
g.1998 <- graph.data.frame(d = df.1998, directed = TRUE)
g.1998 <- simplify(df.1998, remove.multiple = FALSE, remove.loops = TRUE)
E(g.1998)$weight <- count_multiple(g.1998)
g.1998
#calculate values
centralization.degree(g.1998)
g.1998$betweenness <- betweenness(g.1998)
我已经阅读了 for 循环和 lapply 函数,但两者都不能按照我的意图工作。请注意,这是我在 R 中的第一个项目,我更习惯在 Stata 中工作,但我非常渴望学习。
旁注:如果有更优雅的方法将我的数据分组为 15 个图表,我也很感兴趣。我的第一次尝试是将子集划分为月度数据框,但现在我的研究范围已经从几个月改为几年。出于某种原因,我设法在那里写了一个工作循环。
# subsetting into monthly data
#for(j in unique(sample$mon)) {
# yr <- paste("sample", j, sep = ".")
# assign(yr, sample[sample$mon==j,])
#}
提前感谢您花时间阅读本文和任何答案。
这应该会生成一个列表,其中包含每年数据的图表。
library(igraph)
sample <- data.frame(ID = 1:8,
org_ID = c(5,4,1,2,2,2,5,7),
mon = c("1998m1", "1998m2","1998m2","1998m2","1999m4","1999m12","2000m1", "2000m12"))
# Add a column for the year
sample$year <- substr(sample$mon, 1, 4)
# Create a function to generate a graph
get.graphs <- function(df){
g <- graph.data.frame(d = df, directed = TRUE)
g <- simplify(g, remove.multiple = FALSE, remove.loops = TRUE)
E(g)$weight <- count_multiple(g)
g
#calculate values
centralization.degree(g)
g$betweenness <- betweenness(g)
return(g)
}
# Get a list of dataframes by year
df.list <- split(sample, sample$year)
# Create a list of graphs for each year
graph.list <- lapply(df.list, get.graphs)
# Access an individual graph
graph.list$`1999`
我目前正在研究公司联锁,我想分析他们在不同年份之间的联系。到目前为止,我已经调查了我的数据并创建了一个具有多个属性的边缘列表,其中之一是它们连接的时间。这是一些示例数据:
sample <- data.frame(ID = 1:8, org_ID = c(5,4,1,2,2,2,5,7), mon = c("1998m1", "1998m2","1998m2","1998m2","1999m4","1999m12","2000m1", "2000m12"))
library(igraph)
我使用 grep 命令将数据分组为年份,因为这将是我分析的基础:
yr1998 <- grep('1998', unique(sample$mon), value=TRUE)
yr1999 <- grep('1999', unique(sample$mon), value=TRUE)
yr2000 <- grep('2000', unique(sample$mon), value=TRUE)
我的原始数据包含15年,我将计算多个度量。我想创建一个循环,下面显示的代码将在分析中经历所有年份,从 1998 年到 2012 年。我猜如果我的总体思路正确,我可以添加更多度量并绘制我的图表而无需重写每次都是这样——据我所知,这是循环背后的原理,听起来非常方便。 :-)
##Create graph per year:
# 1998
df.1998 <- sample[sample$mon %in% yr1998,]
g.1998 <- graph.data.frame(d = df.1998, directed = TRUE)
g.1998 <- simplify(df.1998, remove.multiple = FALSE, remove.loops = TRUE)
E(g.1998)$weight <- count_multiple(g.1998)
g.1998
#calculate values
centralization.degree(g.1998)
g.1998$betweenness <- betweenness(g.1998)
我已经阅读了 for 循环和 lapply 函数,但两者都不能按照我的意图工作。请注意,这是我在 R 中的第一个项目,我更习惯在 Stata 中工作,但我非常渴望学习。
旁注:如果有更优雅的方法将我的数据分组为 15 个图表,我也很感兴趣。我的第一次尝试是将子集划分为月度数据框,但现在我的研究范围已经从几个月改为几年。出于某种原因,我设法在那里写了一个工作循环。
# subsetting into monthly data
#for(j in unique(sample$mon)) {
# yr <- paste("sample", j, sep = ".")
# assign(yr, sample[sample$mon==j,])
#}
提前感谢您花时间阅读本文和任何答案。
这应该会生成一个列表,其中包含每年数据的图表。
library(igraph)
sample <- data.frame(ID = 1:8,
org_ID = c(5,4,1,2,2,2,5,7),
mon = c("1998m1", "1998m2","1998m2","1998m2","1999m4","1999m12","2000m1", "2000m12"))
# Add a column for the year
sample$year <- substr(sample$mon, 1, 4)
# Create a function to generate a graph
get.graphs <- function(df){
g <- graph.data.frame(d = df, directed = TRUE)
g <- simplify(g, remove.multiple = FALSE, remove.loops = TRUE)
E(g)$weight <- count_multiple(g)
g
#calculate values
centralization.degree(g)
g$betweenness <- betweenness(g)
return(g)
}
# Get a list of dataframes by year
df.list <- split(sample, sample$year)
# Create a list of graphs for each year
graph.list <- lapply(df.list, get.graphs)
# Access an individual graph
graph.list$`1999`