1

数据:

k1 <- 
structure(list(`3280.2000` = structure(c(0, 1.363, 0, 4.198, 
1.097, 1.669, 0, 1.098, 0), .Dim = c(3L, 3L), .Dimnames = list(
    c("3280.3500", "3280.400", "3280.4000"), c("3280.3500", "3280.400", 
    "3280.4000"))), `160.2000` = structure(c(0.935, 0.929, 1.1, 
1.152), .Dim = c(2L, 2L), .Dimnames = list(
    c("160.2200", "160.2300"), c("160.2200", "160.2300")))), .Names = c("3280.2000", "160.2000"))

#k1 Looks like
# $`3280.2000`
#              3280.3500 3280.400 3280.4000
# 3280.3500     0.000    4.198     0.000
# 3280.400      1.363    1.097     1.098
# 3280.4000     0.000    1.669     0.000
# 
# $`160.2000`
#           160.2200 160.2300
# 160.2200    0.935    1.100
# 160.2300    0.929    1.152

k2 <- 
structure(list(`3280.2000` = structure(c(0, 1.363, 0, 4.198, 
1.097, 1.669, 0, 1.098, 0), .Dim = c(3L, 3L), .Dimnames = list(
    c("400","3500",  "4000"), c("400", "3500",  
    "4000"))), `160.2000` = structure(c(0.935, 0.929, 1.152, 
0.903), .Dim = c(2L, 2L), .Dimnames = list(c("2200", "2300"
), c("2200", "2300")))), .Names = c("3280.2000", "160.2000"
))

#k2 Looks like
# $`3280.2000`
#      400  3500  4000
# 400  0.000 4.198 0.000
# 3500 1.363 1.097 1.098
# 4000 0.000 1.669 0.000
# 
# $`160.2000`
#      2200  2300
# 2200 0.935 1.152
# 2300 0.929 0.903

情况: 我有一个如上所述的矩阵列表。我在列表中有不同大小的矩阵,例如(3x3、2x2 等)。除了命名和排序之外,每个列表和每个矩阵都非常相似。我有 k=2(上面的 k1 和 k2)列表,我试图在汇总表中合并在一起。

目标: 从每个列表中检索数据和名称,然后合并以创建汇总表。

可能的解决方案: a)由于矩阵的大小不同,因此将每个列表中的每个矩阵从正方形重新整形到列是最有意义的。Melt.list() 是一个不错的选择。b) 更改矩阵中行和列的名称。由于在3280对象的名称中,它不需要在矩阵行/列的名称中。因此,行和列可以提供可以成功融合的唯一 ID。

问题:

a) Melt(或 melt.list)截断我的变量名。这让我很不高兴(下面的 X1 和 X2 应该是 7-8 位数)。

#   X1      X2 value        L1
# 1  3280.35 3500.00 0.000 3280.2000
# 2  3280.40 3500.00 1.363 3280.2000
# 3  3280.40 3500.00 0.000 3280.2000
# etc

b)我可以更改矩阵的列名,但我不知道如何为数组中的多个矩阵执行此操作。当我尝试这个时,我得到一个名称列表(没有更多的值!)而不是更新名称。

#this works
colnames(k1[[1]]) <- gsub("*.*\\.", "", colnames(k1[[1]]))

#this does not - returns names where values should be!
k1 <- lapply(k1, function (x) {colnames(x) <- gsub("*.*\\.", "", colnames(x))}

问题:我怎样才能:a)防止melt截断我的名字或b)更改矩阵列表上的dimnames?

列表、名称、框架、分层:有多少种方法可以修复我的数据?

搜索: reshape2 文档、plyr 文档、[r] 重命名矩阵列; 列重命名更改行名和列名如何重塑数据框,以及许多其他

提前致谢。

4

1 回答 1

2

你的 lapply 语句没有给你想要的输出的原因是你忘记了返回 x。

# instead of: 
h <- lapply(h, function (x) {colnames(x) <- gsub("*.*\\.", "", colnames(x))})

# Try this: 
h <- lapply(h, function (x) {colnames(x) <- gsub("*.*\\.", "", colnames(x)); x})
于 2013-04-07T19:51:28.950 回答