对于我认为这是一个非常简单的问题,我深表歉意。不幸的是,尽管我在这里的搜索返回了许多从二进数据帧中建立邻接矩阵的结果,但我却没有遇到相反的过程-从邻接矩阵创建二进数据帧。
这是我在R中使用的xls文件的子集:
ccode 2 20 31 40 41 42
year 2010 2010 2010 2010 2010 2010
abbrev USA CAN BHM CUB HAI DOM
2 2010 USA 0 1 1 1 1 1
20 2010 CAN 1 0 0 1 1 1
31 2010 BHM 1 1 0 1 1 0
40 2010 CUB 1 1 1 0 1 1
41 2010 HAI 1 1 1 1 0 1
42 2010 DOM 1 1 0 1 1 0
51 2010 JAM 1 1 0 1 0 0
我希望它看起来像这样:
ccode ccode2 year Value
2 20 2010 1
2 31 2010 1
2 40 2010 1
...
20 31 2010 0
20 40 2010 1
20 41 2010 1
...
执行这种转换需要哪些R程序包/代码?
对于那些希望访问全部数据的用户,它是DIPCON 3.0数据库,可以在这里找到:https://www.volgy.org/projects-and-data
答案 0 :(得分:0)
path = "DIPCON_3.0.xlsx"# Put the correct path to your file
library(readxl)
sheets = excel_sheets(path)
my_read = function(x){
dat = read_excel(path,x)
c_names = 1:4# The column names-also same as the row names
col_names = do.call(paste,data.frame(t(dat[c_names,-c_names])))
row_names = do.call(paste,dat[-c_names,c_names])
dat1 = as.table(matrix(as.numeric(unlist(dat[-c_names,-c_names])),
nrow(dat)-4,dim=list(row_names,col_names)))
d = data.frame(dat1)
l = nrow(d)
proto = data.frame(ccode=numeric(l),Year=numeric(l),C1=character(l),C2=character(l))
m = do.call(cbind,lapply(d[2:1],function(x) strcapture("(\\d+) (\\d+) (\\w+) (\\w+)",x,proto)))
cbind(m,d[3])
}
my_read(sheets[1])