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



我对R比较陌生,并且在将我的数据处理成更可行的形式时遇到麻烦。如果我有一个连续的 x 和 y 向量,其中一些具有相同 y 值的多个 x 值,我将如何编写一个脚本来自动平均这些多个 x 值并创建一个具有相同长度的平均 x 值和 y 值的新 data.set。下面包括一个示例。

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)

我认为这符合您的要求。在这种情况下,聚合函数将按 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 )
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

相关内容

  • 没有找到相关文章

最新更新