繁体   English   中英

通过取它们的最小值来合并具有相同名称的列

[英]merge columns with same name by taking the minimum of their values

我有一个大矩阵,像这样:

m:
    0    0    0    60    60  ... (column names) 
 0  2    4    5     9    2
 0  6    8    7     6    4
 0  5    2    6     4    5
 0  3    4    1     3    4
60  4    5    3     1    4
60  4    6    10    2    2
 .
 .
(row names)

我想合并具有相同名称的列,并找到最小值。 最后我想有一个这样的矩阵:

  k:
    0   60  ... (column names) 
 0  2    2
 0  6    4
 0  2    4     
 0  1    3     
60  3    1     
60  4    2    
 .
 .
(row names)

这是一个选项,我们split data.frame转换的matrix按列名拆分为一个list ,使用sapply循环遍历该list ,并使用pmin获取每行的min

out <- sapply(split.default(as.data.frame(m), colnames(m)),
         function(x) do.call(pmin, x))
row.names(out) <- row.names(m)
out
#   0 60
#0  2  2
#0  6  4
#0  2  4
#0  1  3
#60 3  1
#60 4  2

或者另一种选择是tapply

tapply(m, list(row(m), colnames(m)[col(m)]), FUN = min)

数据

m <- structure(c(2, 6, 5, 3, 4, 4, 4, 8, 2, 4, 5, 6, 5, 7, 6, 1, 3, 
10, 9, 6, 4, 3, 1, 2, 2, 4, 5, 4, 4, 2), .Dim = 6:5, .Dimnames = list(
    c("0", "0", "0", "0", "60", "60"), c("0", "0", "0", "60", 
    "60")))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM