首页 > 解决方案 > 通过循环从数据框中填充矩阵

问题描述

基于数据集(参见“输入”),我想创建以下矩阵:

> A
   BM CC  E  F  I  S CnC D
BR  1  2  3  4  5  6 NA NA
MX  7  8 11 12 13 14  9 10

输入:

cntry <- c("BR", "BR", "BR", "BR", "BR", "BR", "MX", "MX", "MX","MX", "MX", "MX", "MX", "MX")
sector <- c("BM", "CC", "E", "F", "I", "S","BM", "CC", "CnC", "D", "E", "F", "I", "S")
ratio <- seq(1, 14)
data <- data.frame(cbind(cntry, sector, ratio)
> data
   cntry sector ratio
1     BR     BM     1
2     BR     CC     2
3     BR      E     3
4     BR      F     4
5     BR      I     5
6     BR      S     6
7     MX     BM     7
8     MX     CC     8
9     MX    CnC     9
10    MX      D    10
11    MX      E    11
12    MX      F    12
13    MX      I    13
14    MX      S    14

我尝试了以下但无法继续进行:

cntry_n <- nrow(cntry) # number of countries (here: 2), duplicates were removed
sector_n <- nrow(sector) # number of sectors(here: 8), duplicates were removed

A <- matrix(0, cntry_n, sector_n) # Zero was used as a default
rownames(A) <- cntry 
colnames(A) <- sector

> A
   BM CC  E  F  I  S CnC D
BR  0  0  0  0  0  0   0 0
MX  0  0  0  0  0  0   0 0

for(m in 1:cntry_n){
  for(n in 1:sector_n){
    A[m, n] = ????
  }
}

有没有有效的方法来解决这样的问题?

非常感谢任何帮助!

标签: rloopsdataframematrix

解决方案


你可以试试:

library(tidyr)
data2 <- pivot_wider(data,names_from = sector,values_from = ratio)

# A tibble: 2 x 9
  cntry BM    CC    E     F     I     S     CnC   D    
  <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr>
1 BR    1     2     3     4     5     6     <NA>  <NA> 
2 MX    7     8     11    12    13    14    9     10  

推荐阅读