重塑数据帧 - 来自相关变量的两列

时间:2014-10-17 19:39:31

标签: r aggregate reshape

我有以下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

有什么想法吗?

2 个答案:

答案 0 :(得分:2)

这是一种方式:

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

答案 1 :(得分:0)

在基地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。