R中连续相同行的总和

时间:2016-03-14 07:10:32

标签: r

我有以下数据,例如

V1    V2    V3
6.9  6.2   4590
6.9  6.2   1340
7.1  6.2   3000
7.2  6.3   3490

我想要获得的输出是

V1   V2  V3
6.9  6.2 avg(4590,1340)
7.1  6.2 3000
7.2  6.3 3490

目的是如果在V1和V1中连续的值,则找到平均V3。 V2是一样的。

先谢谢..

2 个答案:

答案 0 :(得分:3)

我们可以使用aggregate

aggregate(V3~., df1, mean)
#  V1  V2   V3
#1 6.9 6.2 2965
#2 7.1 6.2 3000
#3 7.2 6.3 3490

或者

library(data.table)
setDT(df1)[, list(V3= mean(V3)) ,.(V1, V2)]

或者

library(dplyr)
df1 %>%
   group_by(V1, V2) %>%
   summarise(V3= mean(V3))

sqldf

library(sqldf)
sqldf('select V1, V2,  
        avg(V3) as V3 
        from df1
        group by V1, V2') 

数据

df1 <- structure(list(V1 = c(6.9, 6.9, 7.1, 7.2), 
 V2 = c(6.2, 6.2, 6.2, 
 6.3), V3 = c(4590L, 1340L, 3000L, 3490L)),
.Names = c("V1", "V2", 
"V3"), class = "data.frame", row.names = c(NA, -4L))

答案 1 :(得分:1)

以下是require(plyr) > ddply(df, .(V1, V2), summarise, V2=mean(V2), V3=mean(V3)) V1 V2 V3 1 6.9 6.2 2965 2 7.1 6.2 3000 3 7.2 6.3 3490 解决方案:

V1

请注意,在SQL术语中,您希望按照V2.(V1, V2)列的组合进行分组,这些列在第二个参数中表示为df <- data.frame(V1=c(6.9, 6.9, 7.1, 7.2), V2=c(6.2, 6.2, 6.2, 6.3), V3=c(4590, 1340, 3000, 3490))

数据:

invalidateCache()