通过取最小值合并同名列
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
,通过 list
循环 sapply
并使用 pmin
获取每行的 min
ium
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")))
我有一个很大的矩阵,像这样:
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
,通过 list
循环 sapply
并使用 pmin
min
ium
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")))