向R中的矩阵列表中的每个矩阵添加新列 [英] Add new columns to every matrices in a list of matrices in R

查看:523
本文介绍了向R中的矩阵列表中的每个矩阵添加新列的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个包含61个矩阵的矩阵列表.下面是61个矩阵之一的示例.

I have a list of matrices with 61 matrices. Below is an example of one of the 61 matrices.

list_matrix_Tanzania_Mod500
[[60]]
      LU_2000
 [1,]      12
 [2,]      12
 [3,]      12
 [4,]      12
 [5,]      12
 [6,]      12
 [7,]      12
 [8,]      12
 [9,]      12
[10,]      11
[11,]      11
[12,]      12
[13,]      11
[14,]      12
[15,]      12 

我想向矩阵列表中的每个矩阵添加10个新的列.添加这些新列后,我想为每个列赋予标题名称,其值分别为NA:"ID", "LU_1990", "CHLU_90_00", "LU_2005", "CHLU_00_05", "Tile", "UNIQ_ID", "AREA", "Sour_90_00", "Sour_00_05"

I want to add 10 new colums to every matrices of the list of matrices. Once I have added these new columns, I want to give a header name to each columns with a value NA: "ID", "LU_1990", "CHLU_90_00", "LU_2005", "CHLU_00_05", "Tile", "UNIQ_ID", "AREA", "Sour_90_00", "Sour_00_05"

我现在想用几个矩阵填充矩阵列表list_matrix_Tanzania_Modis:LU_Mod2000, LU_Mod2005 and list_matrix_Tanzania.我尝试了此操作,但该列更新得不好.首先,当我为LU_Mod2005运行Map代码行时,将从矩阵中删除LU_2000的值.

I now want to fill in the list of matrices list_matrix_Tanzania_Modis with several matrices: LU_Mod2000, LU_Mod2005 and list_matrix_Tanzania. I tried this but the column are not updated well. Fot instance, when I run the Mapcode line for the LU_Mod2005, the values of LU_2000 are erased from the matrices.

columnsToTransfer1 <- 'LU_2000'
columnsToTransfer2 <- 'LU_2005'
columnsToTransfer3<- ('ID', 'Tile', 'UNIQ_ID')

    Map(function(x,y,z) {x[,z] <- y[,z];x},
                list_matrix_Tanzania_Modis, LU_Mod2000, columnsToTransfer1)
    Map(function(x,y,z) {x[,z] <- y[,z];x},
        list_matrix_Tanzania_Modis, LU_Mod2005, columnsToTransfer2)
Map(function(x,y,z) {x[,z] <- y[,z];x},
    list_matrix_Tanzania_Modis, list_matrix_Tanzania, columnsToTransfer3)

此技巧有效,但我想将矩阵列表的名称保留为list_matrix_Tanzania_Modis

This trick is working but I would like to keep the name of the list of matrices as list_matrix_Tanzania_Modis

list_matrix_Tanzania_Modis1<- Map(function(x,y,z) {x[,z] <- y[,z];x},
            list_matrix_Tanzania_Modis, LU_Mod2000, columnsToTransfer1)
list_matrix_Tanzania_Modis2<-Map(function(x,y,z) {x[,z] <- y[,z];x},
    list_matrix_Tanzania_Modis1, LU_Mod2005, columnsToTransfer2)

推荐答案

如果我正确理解,在创建正确尺寸的空矩阵后,简单的cbind应该可以工作:

If I understand correctly, a simple cbind should work after creating an empty matrix of the correct dimensions:

样本输入:

L <- list(matrix(1:3, ncol = 1, dimnames = list(NULL, "a")),
          matrix(1:5, ncol = 1, dimnames = list(NULL, "b")))
L
# [[1]]
#      a
# [1,] 1
# [2,] 2
# [3,] 3
# 
# [[2]]
#      b
# [1,] 1
# [2,] 2
# [3,] 3
# [4,] 4
# [5,] 5

您要添加的新列:

newcols <- c("ID", "LU_1990", "CHLU_90_00", "LU_2005", "CHLU_00_05",
             "Tile", "UNIQ_ID", "AREA", "Sour_90_00", "Sour_00_05")

使用lapply循环浏览列表,将相关的空列添加到每个列表项.

Use lapply to cycle through the list, adding the relevant empty columns to each list item.

myNewList <- lapply(L, function(x) {
  M <- matrix(NA, nrow = nrow(x), ncol = 10, dimnames = list(NULL, newcols))
  cbind(x, M)
})

myNewList
# [[1]]
#      a ID LU_1990 CHLU_90_00 LU_2005 CHLU_00_05 Tile UNIQ_ID AREA Sour_90_00 Sour_00_05
# [1,] 1 NA      NA         NA      NA         NA   NA      NA   NA         NA         NA
# [2,] 2 NA      NA         NA      NA         NA   NA      NA   NA         NA         NA
# [3,] 3 NA      NA         NA      NA         NA   NA      NA   NA         NA         NA
# 
# [[2]]
#      b ID LU_1990 CHLU_90_00 LU_2005 CHLU_00_05 Tile UNIQ_ID AREA Sour_90_00 Sour_00_05
# [1,] 1 NA      NA         NA      NA         NA   NA      NA   NA         NA         NA
# [2,] 2 NA      NA         NA      NA         NA   NA      NA   NA         NA         NA
# [3,] 3 NA      NA         NA      NA         NA   NA      NA   NA         NA         NA
# [4,] 4 NA      NA         NA      NA         NA   NA      NA   NA         NA         NA
# [5,] 5 NA      NA         NA      NA         NA   NA      NA   NA         NA         NA

这篇关于向R中的矩阵列表中的每个矩阵添加新列的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆