数据:
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)我可以更改矩阵的colnames,但我无法弄清楚如何为数组中的多个矩阵进行操作。当我尝试这个时,我得到一个名单列表(没有更多的值!),而不是名称的更新。
#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)防止熔化物截断我的名字 要么 b)更改矩阵列表中的dimnames?
列表,名称,框架,分层:我可以通过多少种方式修复数据?
搜索: reshape2文档,plyr文档,[r]重命名矩阵列; column renaming, changing row and column names, how to reshape dataframe, 还有很多其他人
提前致谢。
答案 0 :(得分: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})