2013-04-07 73 views
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.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))} 

问题:我怎样才能既: 一)防止截断矩阵的名单上我的名字 或 二)改变dimnames融化?

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

搜索: reshape2文档,plyr文档,[r]重命名矩阵列; column renamingchanging row and column nameshow to reshape dataframe, 和其他很多

感谢提前。

回答

2

你的乐声声明不会给你想要的输出的原因是你忘了返回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}) 
+0

...对不起,只好空格的数量减少到4,强迫症,我知道:)... – 2013-04-07 20:01:22

+0

保罗,你怎么看这一个即可;)http://stackoverflow.com/问题/ 15646618 /意外符号在r请参阅代码/ – 2013-04-07 20:07:50

+0

或这一个,其中问题具体解决丑看代码:http://stackoverflow.com/questions/15829805/is-there-一个概念- - 快捷方式别名指针在-R的/ 15830146#15830146。 – 2013-04-07 20:13:26