R数据:仅当y值相同时,才将x值平均为新矢量

时间:2015-01-29 01:01:06

标签: r rscript

我对R来说相对较新,并且无法将我的数据处理成更可行的形式。如果我有一个连续的x和y向量,有些具有相同y值的多个x值,我将如何编写一个脚本,该脚本可以自动平均那些多个x值并使用平均x值创建一个新的data.set和y相同长度的值。下面是一个例子。

X <- c(34.2, 35.3, 32.1, 33.0, 34.7, 34.2, 34.1, 34.0, 34.1)
Y <- c(90.1, 90.1, 72.5, 63.1, 45.1, 22.2, 22.2, 22.2,  5.6)

3 个答案:

答案 0 :(得分:1)

我认为这可以满足您的需求。在这种情况下,聚合函数将y除以x,并采用均值。

x<-c(34.2,35.3,32.1,33.0,34.7, 34.2, 34.1, 34.0, 34.1)
y<-c(90.1, 90.1, 72.5, 63.1, 45.1, 22.2, 22.2, 22.2,  5.6 )
df<-data.frame(x=x,y=y)

df2<-aggregate(y~.,data=df,FUN=mean) 
df2

答案 1 :(得分:1)

我假设你想要每个Y值的平均值

试试这个:

X <- c(34.2, 35.3, 32.1, 33.0, 34.7, 34.2, 34.1, 34.0, 34.1)
Y <- c(90.1, 90.1, 72.5, 63.1, 45.1, 22.2, 22.2, 22.2,  5.6)
xy <- cbind(X,Y)
xy<- as.data.frame(xy)
tapply( X = xy$X,INDEX = list(xy$Y),FUN = mean )

答案 2 :(得分:0)

如果我理解正确,您需要一个新数据集,其中对于每个Y值,您具有相应X值的平均值。使用长度为1的向量的平均值只是处理单例的值这一事实,可以使用dplyr轻松完成。

X <- c(34.2, 35.3, 32.1, 33.0, 34.7, 34.2, 34.1, 34.0, 34.1)
Y <- c(90.1, 90.1, 72.5, 63.1, 45.1, 22.2, 22.2, 22.2,  5.6)
Df <- data.frame(X, Y)
> Df
     X    Y
1 34.2 90.1
2 35.3 90.1
3 32.1 72.5
4 33.0 63.1
5 34.7 45.1
6 34.2 22.2
7 34.1 22.2
8 34.0 22.2
9 34.1  5.6

现在:

library(dplyr)
Df2 <- Df %>% group_by(Y) %>% summarize(X = mean(X))
> Df2
Source: local data frame [6 x 2]

     Y     X
1  5.6 34.10
2 22.2 34.10
3 45.1 34.70
4 63.1 33.00
5 72.5 32.10
6 90.1 34.75