r - 通过循环从数据框中填充矩阵
问题描述
基于数据集(参见“输入”),我想创建以下矩阵:
> 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] = ????
}
}
有没有有效的方法来解决这样的问题?
非常感谢任何帮助!
解决方案
你可以试试:
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