[英]Add new columns to every matrices in a list of matrices in R
I have a list of matrices with 61 matrices. 我有一个包含61个矩阵的矩阵列表。 Below is an example of one of the 61 matrices.
下面是61个矩阵之一的示例。
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
I want to add 10 new colums to every matrices of the list of matrices. 我想向矩阵列表中的每个矩阵添加10个新的列。 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"
添加这些新列后,我想为每个列赋予标题名称,其值
NA
: "ID", "LU_1990", "CHLU_90_00", "LU_2005", "CHLU_00_05", "Tile", "UNIQ_ID", "AREA", "Sour_90_00", "Sour_00_05"
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
. 我现在想用几个矩阵来填充矩阵列表list_matrix_Tanzania_Modis:
LU_Mod2000, LU_Mod2005 and list_matrix_Tanzania
。 I tried this but the column are not updated well. 我尝试了此操作,但此列更新得不好。 Fot instance, when I run the
Map
code line for the LU_Mod2005, the values of LU_2000 are erased from the matrices. 首先,当我为LU_Mod2005运行
Map
代码行时,将从矩阵中删除LU_2000的值。
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)
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_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)
If I understand correctly, a simple cbind
should work after creating an empty matrix of the correct dimensions: 如果我理解正确,那么在创建正确尺寸的空矩阵后,一个简单的
cbind
应该可以工作:
Sample input: 输入样例:
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
The new columns you want to add: 您要添加的新列:
newcols <- c("ID", "LU_1990", "CHLU_90_00", "LU_2005", "CHLU_00_05",
"Tile", "UNIQ_ID", "AREA", "Sour_90_00", "Sour_00_05")
Use lapply
to cycle through the list, adding the relevant empty columns to each list item. 使用
lapply
在列表中循环,将相关的空列添加到每个列表项。
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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.