我有一个最小示例的矩阵:
data <- c(1, 1, 1, 1, 1, 1, 2, 2, 3, 3, 4, 4)
Matrix = matrix(data, nrow = 3, ncol=4)
colnames(Matrix) <-c("4","3","7","100")
rownames(Matrix) <-c("bob","foo","bar")
> Matrix
4 3 7 100
bob 1 1 2 3
foo 1 1 2 4
bar 1 1 3 4除了名称之外,我还想组合任何相同的列,并更新列名称,以便知道相同的原始列。我曾尝试使用循环查找重复列,但无法获得组合名称部分。
预期的结果将类似于以下矩阵:
>Matrix
4-3 7 100
bob 1 2 3
foo 1 2 4
bar 1 3 4发布于 2020-07-23 07:15:26
下面是另一个基本R选项
do.call(
cbind,
Map(
function(x) `colnames<-`(Matrix[, (nm<-names(x))[1], drop = FALSE], paste0(nm, collapse = "-")),
split(u <-unlist(Map(toString, as.data.frame(Matrix))), u)
)
)这给了我们
4-3 7 100
bob 1 2 3
foo 1 2 4
bar 1 3 4发布于 2020-07-23 06:54:27
我们可以根据列的pasted值将列split到一个list中,然后获得第一列,并将列名和cbind
do.call(cbind, lapply(unname(split.default(as.data.frame(Matrix),
apply(Matrix, 2, paste, collapse = ''))),
function(x) matrix(x[,1],
dimnames = list(NULL, paste(colnames(x), collapse='-')))))https://stackoverflow.com/questions/63044177
复制相似问题