聚合并计入新列

时间:2017-09-18 09:23:28

标签: r aggregate

我有一个包含V1V2列的大型数据框。它代表了一个边缘列表。我想创建第三列COUNT,它会计算精确边出现的次数。例如,如果V1 == 1V2 == 2,我想计算其他时间V1 == 1V2 == 2的数量,将它们合并为一行并将计数放在第三列中。

Data <- data.frame(
    V1 = c(1,1),
    V2 = c(2,2)
)

我尝试了类似new = aggregate(V1 ~ V2,data=df,FUN=length)的内容,但它并不适用于我。

2 个答案:

答案 0 :(得分:1)

...或者可能使用data.table:

library(data.table)
df<-data.table(v1=c(1,2,3,4,5,1,2,3,1),v2=c(2,3,4,5,6,2,3,4,3))
df[ , count := .N, by=.(v1,v2)] ; df

   v1 v2 count
1:  1  2     2
2:  2  3     2
3:  3  4     2
4:  4  5     1
5:  5  6     1
6:  1  2     2
7:  2  3     2
8:  3  4     2
9:  1  3     1

答案 1 :(得分:0)

假设数据结构为:

df<-data.frame(v1=c(1,2,3,4,5,1,2,3),v2=c(2,3,4,5,6,2,3,4),stringsAsFactors = FALSE)

> df
  v1 v2
1  1  2
2  2  3
3  3  4
4  4  5
5  5  6
6  1  2
7  2  3
8  3  4

使用ddply包中的plyr函数来计算所有边对

df2 <- ddply(df, .(v1,v2), function(df) c(count=nrow(df)))

> df2
  v1 v2 count
1  1  2     2
2  2  3     2
3  3  4     2
4  4  5     1
5  5  6     1