【问题标题】:merge two rows of n dimension by considering one column通过考虑一列合并两行 n 维
【发布时间】:2014-02-03 12:34:08
【问题描述】:

我有一个矩阵,它是在使用cbind() 之后形成的

   ! ? c e i k l t
dif     0 0 1 0 0 0 
dor     1 0 0 0 0 0
dor     0 0 0 0 0 1
same    0 0 0 1 0 0 
same    0 1 0 0 0 0

建议我使用 R 中的代码来合并如下行


   ! ? c e i k l t
same    1 1 0 1 0 0 
dif     0 0 1 0 0 0 
dor     1 0 0 0 0 1

谢谢你..

【问题讨论】:

  • ! ? c e i k l t 是您的列名吗?
  • 是的。所以上面的数据是样本。我有成千上万的行和列。所有这些都在 excel 中,所以使用列名(header=TRUE)导入数据

标签: r merge rows


【解决方案1】:
df<-read.table(header=T,text="ID c e i k l t
dif     0 0 1 0 0 0 
dor     1 0 0 0 0 0
dor     0 0 0 0 0 1
same    0 0 0 1 0 0 
same    0 1 0 0 0 0")

require(plyr)

ddply(df,.(ID),function(x)colSums(x[,-1]))

    ID c e i k l t
1  dif 0 0 1 0 0 0
2  dor 1 0 0 0 0 1
3 same 0 1 0 1 0 0

【讨论】:

    【解决方案2】:

    命令确认:

    aggregate(df[, -1], list(df[, 1]), function(x) {
      Reduce("|", x)
    })
    #   Group.1 c e i k l t
    # 1     dif 0 0 1 0 0 0
    # 2     dor 1 0 0 0 0 1
    # 3    same 0 1 0 1 0 0
    

    【讨论】:

      【解决方案3】:

      你想要总和,还是想要逻辑或:

      逻辑或:

      require(functional)
      aggregate(. ~ ID, data=df, FUN=Compose(any, as.numeric))
          ID c e i k l t
      1  dif 0 0 1 0 0 0
      2  dor 1 0 0 0 0 1
      3 same 0 1 0 1 0 0
      

      总和:

      aggregate(. ~ ID, data=df, FUN=sum)
      

      这里的结果是一样的。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-09-29
        • 2016-09-22
        • 1970-01-01
        • 2017-02-20
        • 1970-01-01
        • 2015-04-14
        • 1970-01-01
        相关资源
        最近更新 更多