R 数据:仅当 y 值相同时才将 x 值平均到新向量中

R data: Averaging x values into a new vector only if y values are the same

我对 R 比较陌生,在将我的数据处理成更可行的形式时遇到了问题。如果我有一个连续的 x 和 y 向量,其中一些具有多个 x 值以获得相同的 y 值,我将如何编写一个脚本来自动对这些多个 x 值进行平均并创建一个新的 data.set 与平均值相同长度的 x 值和 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)

我认为这可以满足您的需求。在这种情况下,聚合函数会将 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

我假设您想要每个 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 )

如果我没理解错的话,您需要一个新的数据集,其中每个 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