我有一个包含V1
和V2
列的大型数据框。它代表了一个边缘列表。我想创建第三列COUNT
,它会计算精确边出现的次数。例如,如果V1 == 1
和V2 == 2
,我想计算其他时间V1 == 1
和V2 == 2
的数量,将它们合并为一行并将计数放在第三列中。
Data <- data.frame(
V1 = c(1,1),
V2 = c(2,2)
)
我尝试了类似new = aggregate(V1 ~ V2,data=df,FUN=length)
的内容,但它并不适用于我。
答案 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