我有以下数据,例如
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是一样的。
先谢谢..
答案 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()