Построить график сети по скользящему периоду, используя R - PullRequest
0 голосов
/ 16 сентября 2018

Я пытался провести график сети и некоторую статистику, свернув трехлетний период, но я не знаю, как установить функцию прокрутки.Ниже приведено мое кодирование без прокрутки.

> library(igraph)
> em <- read.csv(file.choose(), header = TRUE )
> network <- graph.data.frame(em, directed = TRUE )
> em
   sender receiver weights year
1       a        d       2 2001
2       b        a       3 2001
3       c        a       1 2001
4       d        h       1 2001
5       e        d       3 2001
6       a        b       1 2002
7       b        c       2 2002
8       c        d       1 2002
9       d        a       1 2002
10      e        h       2 2002
11      a        d       1 2003
12      b        d       1 2003
13      c        a       2 2003
14      d        h       2 2003
15      e        a       1 2003
16      a        d       1 2004
17      b        c       1 2004
18      c        d       2 2004
19      d        c       1 2004
20      e        a       2 2004
> E(network)$weight <- as.numeric(network[,3])
Warning message:
In eattrs[[name]][index] <- value :
  number of items to replace is not a multiple of replacement length
> p <- plot (network,edge.width=E(network)$weight)

Так что в этом примере в конечном итоге получится один взвешенный сетевой график.Я хотел бы провести графики, используя данные в 2001-2003 и 2002-2004 гг., А также статистику СНС.Некоторые онлайн-ресурсы предлагают -rollappy () - или функции в пакете -tidyquant- могли бы сработать, но мне не удалось понять, как распознать 4-й столбец как год и как установить скользящий период.Буду очень признателен, если кто-нибудь может помочь, так как я новичок в R.

Большое спасибо !!

1 Ответ

0 голосов
/ 19 сентября 2018

Спасибо @ emilliman5 за дополнительные вопросы.

Мой настоящий набор данных - это несбалансированная панель с 15-летним периодом времени.Я был предназначен для проведения сетевых графиков, используя часть полных данных.Правило вычитания - это трехлетний период прокатки (фактически с некоторыми другими условиями, но я только что попросил прокатку здесь).Поэтому я планировал сначала вызвать скользящие подвыборки и провести графики.Надеюсь, теперь это немного понятно.

Приведенные выше данные были просто пробным образцом.4-летний диапазон должен генерировать два графика (2001-2003, 2002-2004), а 15-летний должен составить 13 графиков.Реальная весовая переменная не называется весом, но я согласен, что строка «as.numeric (network [, 3])» является избыточной.(Теперь я понимаю, что пример, который я сделал, не был хорош ... извините ...)

Я получил кое-кого, кто помог мне с этим сейчас, поэтому я просто выложу некоторые коды.Надеюсь, что это может помочь другим людям.

Метод 1: вызвать подвыборки по функциям.Это избавит меня от создания вложенных циклов вместе с построением графиков.

# Function: conditions for substracting; here rolling-year only
f <- function(j){                 
df <- subset(em, year>=j & year <= j+2)
}

print (f(2001))                  # Test function output, print-out

# Rolling by location and year, graph-plotting
for (j in 2001:2002){
sdf = f(j)                              
nw <- graph.data.frame(sdf, directed = TRUE)
plot(nw, edge.width = E(sdf[[j]])$weight)
}

Метод 2: Используйте циклы - отлично подходит для одного или двух условий вычитания, но было бы немного неуклюже для большего.

c <- 2001                       # a number for year count
sdf <- {}                       # Set an empty set to save subsets
for (j in 2001:2002){
df_temp <- subset(em, year>=j & year<=j+2)
print(nrow(df_temp))            # To check the subset, not necessary
sdf[[c]] <- cbind(df_temp)
nw <- graph.data.frame(sdf[[c]], directed = TRUE)
plot(nw, edge.width = E(sdf[[c]])$weight)
c <- c + 1
}
...