首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >组合相同的列,连接R中的列名

组合相同的列,连接R中的列名
EN

Stack Overflow用户
提问于 2020-07-23 06:39:29
回答 2查看 41关注 0票数 1

我有一个最小示例的矩阵:

代码语言:javascript
复制
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

除了名称之外,我还想组合任何相同的列,并更新列名称,以便知道相同的原始列。我曾尝试使用循环查找重复列,但无法获得组合名称部分。

预期的结果将类似于以下矩阵:

代码语言:javascript
复制
>Matrix 
    4-3   7   100
bob   1   2    3
foo   1   2    4
bar   1   3    4
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-07-23 07:15:26

下面是另一个基本R选项

代码语言:javascript
复制
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)
    )
)

这给了我们

代码语言:javascript
复制
    4-3 7 100
bob   1 2   3
foo   1 2   4
bar   1 3   4
票数 1
EN

Stack Overflow用户

发布于 2020-07-23 06:54:27

我们可以根据列的pasted值将列split到一个list中,然后获得第一列,并将列名和cbind

代码语言:javascript
复制
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='-')))))
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63044177

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档