r - 通过循环从数据帧填充矩阵

标签 r loops dataframe matrix

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

> 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  

关于r - 通过循环从数据帧填充矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62933515/

相关文章:

r - 如何使用列表子元素名称而不是实际子元素名称

r - 使用美国县级数据创建 Choropleth map

r - 使用 for 循环遍历列名向 gt 表添加标签

JavaScript:重构循环正则表达式

python - 基于一个键将数据从 df 复制到多列中的另一个 df

在 R 中同时运行多个具有交互项的回归

arrays - for 循环中的协议(protocol)一致性检查?

php - 在 foreach 循环中从数据库中“加载更多”数据

python pandas : assign control vs. 根据 % 随机处理分组

python - 从多级索引数据框中有选择地删除列