我对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