【问题标题】:Reshaping dataframe - two columns from correlation variables重塑数据框 - 来自相关变量的两列
【发布时间】:2014-12-13 11:11:06
【问题描述】:

我有下面的df

    var1 var2 Freq
1    a    b   10
2    b    a    5
3    b    d   10

创建自

help <- data.frame(var1 = c("a", "b", "b"), var2 = c("b", "a", "d"), Freq = c(10, 5, 10))

ab相关性和ba一样,我希望把它们合并成一行看起来像

   var1 var2 Freq
1    a    b   15
2    b    d   10

有什么想法吗?

【问题讨论】:

  • 通过使用stringsAsFactors=FALSE,您可以更改var1=pmin(var1,var2)var2=pmax(var1,var2),之后聚合应该很简单。

标签: r aggregate reshape


【解决方案1】:

这是一种方法:

setNames(aggregate(help$Freq, as.data.frame(t(apply(help[-3], 1, sort))), sum), 
         names(help))

#   var1 var2 Freq
# 1    a    b   15
# 2    b    d   10

【讨论】:

  • 谢谢,斯文。你能解释一下 help[-3] 是什么意思吗?
  • @bpace 命令help[-3] 是负索引的一个示例。它返回help 的所有列,第三列除外。
【解决方案2】:

在基础 R 中:

do.call(rbind,
by(dat,rowSums(sapply(dat[,c("var1","var2")],as.integer)),
   function(x)data.frame(x[1,c("var1","var2")],
                         Freq= sum(x[,"Freq"]))))

  var1 var2 Freq
3    a    b   15
5    b    d   10

我首先通过对列的整数表示求和来创建一个分组变量。然后按组执行频率总和。最后绑定结果得到一个新的data.frame。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-02
    • 2021-09-18
    • 2012-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多