создание матрицы из данных - PullRequest
0 голосов
/ 01 ноября 2018

У меня есть данные, которые имеют три столбца, которые выглядят так:

ppl loc1 loc2 
 1   US  CH   
 1   US  KR  
 1   US  CAN 
 1   CAN KR
 1   KR  CH
 1   CH  US
 1   CAN CH
 1   US  US

Я хочу создать матрицу, которая будет выглядеть примерно так:

       US CH KR CAN
    US 1  2  1  1  
    CH 2  0  1  1
    KR 1  1  0  0
   CAN 1  1  1  0

Любые предложения будут удивительными.

Ответы [ 3 ]

0 голосов
/ 01 ноября 2018

R ответ:

Это должно работать: y <- уникальный (данные [, 2]) </p>

x <- unique(data[,3])
mat <- matrix(NA,length(x),length(y))

for(i in 1:nrow(mat)){
  for(j in 1:rcol(mat)){
    mat[i,j] <- sum(as.numeric(data[,2] == y[j] & data[,3] == x[i]))
  }
}
0 голосов
/ 01 ноября 2018

Stata ответ:

clear 
input ppl str3 (loc1 loc2) 
 1   US  CH   
 1   US  KR  
 1   US  CAN 
 1   CAN KR
 1   KR  CH
 1   CH  US
 1   CAN CH
 1   US  US
 end 

 tab loc1 loc2, matcell(whatever) 

 mat li whatever 

whatever[4,4]
    c1  c2  c3  c4
r1   0   1   1   0
r2   0   0   0   1
r3   0   1   0   0
r4   1   1   1   1

См. help matrix для добавления имен строк и столбцов.

0 голосов
/ 01 ноября 2018

R ответ:

Вы можете matrix только для числовых векторов. в вашем случае, поскольку у вас есть строки, вы должны использовать data.frame примерно так:

ppl <- rep(1,8)
loc1 <- c("US", "US", "US", "CAN", "KR", "CH", "CAN", "US")
loc2 <- c("CH","KR"  ,"CAN" ,"KR","CH","US","CH","US")

mat <- matrix(ppl, loc1, loc2) #error
df <- data.frame(ppl, loc1, loc2, stringsAsFactors = F)
> df
  ppl loc1 loc2
1   1   US   CH
2   1   US   KR
3   1   US  CAN
4   1  CAN   KR
5   1   KR   CH
6   1   CH   US
7   1  CAN   CH
8   1   US   US
...