繁体   English   中英

在R中创建一系列连接矩阵

[英]Create a series of connectivity matrices in R

假设我在R中有一个数据集,指示国际组织中国家的成员资格(原始数据集可以在这里找到:IGO_stateunit_v2.3.zip)。

这是数据基本结构的示例:

cntr <- c('A','B','C','A','B','C','A','B','C')
year <- c(1990,1990,1990,1991,1991,1991,1992,1992,1992)
UNO <- c(0, 1, 1, 1, 1, 1, 1, 1, 1)
APEC <- c(0, 0, 0, 0, 0, 0,1, 1, 1 )
ASEAN <- c(0, 0, 0, 0, 1, 1, 0, 1, 1)
data <- data.frame(cntr, year, UNO, APEC, ASEAN)

因此,数据看起来像这样,其中1 =组织中的成员身份,并且可能随着时间的推移而变化:

  cntr    year UNO APEC ASEAN
1    A    1990   0    0     0
2    B    1990   1    0     0
3    C    1990   1    0     0
4    A    1991   1    0     0
5    B    1991   1    0     1
6    C    1991   1    0     1
7    A    1992   1    1     0
8    B    1992   1    1     1
9    C    1992   1    1     1

我想用R中的此数据创建一个矩阵,该矩阵每年计算两个国家共同拥有的成员数量。 结果应如下所示:

m.1990

  A B C
A 0 0 0
B 0 0 1
C 0 1 0

m.1991

  A B C
A 0 1 1
B 1 0 2
C 1 2 0

m.1992

  A B C
A 0 2 2
B 2 0 3
C 2 3 0

下面是每年的代码:

data.1990 <- subset(data, year==1990, select=-c(year))
rownames(data.1990) <- data.1990$cntr
m.1990<- tcrossprod(as.matrix(data.1990[,-1]))
diag(m.1990) <- 0

data.1991 <- subset(data, year==1991, select=-c(year))
rownames(data.1991) <- data.1991$cntr
m.1991<- tcrossprod(as.matrix(data.1991[,-1]))
diag(m.1991) <- 0

data.1992 <- subset(data, year==1992, select=-c(year))
rownames(data.1992) <- data.1992$cntr
m.1992<- tcrossprod(as.matrix(data.1992[,-1]))
diag(m.1992) <- 0

我无法做的是创建一个执行这些计算的循环,并将每个结果保存到相应的矩阵中。 我也尝试过使用df_list <- split(data, as.factor(data$year))作为第一步,但没有设法对随后的计算进行编码。

帮助将不胜感激。

您可以做这样的事情,尽管我没有尝试过多地优化您的方法

lapply(split(data, data$year), function(x) {
                                        rownames(x) <- x$cntr
                                        x <- tcrossprod(as.matrix(x[,-(1:2)]))
                                        diag(x) <- 0
                                        x})


# $`1990`
#   A B C
# A 0 0 0
# B 0 0 1
# C 0 1 0
# 
# $`1991`
#   A B C
# A 0 1 1
# B 1 0 2
# C 1 2 0
# 
# $`1992`
#   A B C
# A 0 2 2
# B 2 0 3
# C 2 3 0

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM