我试图调整一些数据,以便检索(1)两个+组的某些测量的总和,然后(2)该测量除以该组中的观察数。我已经实现了(1)但没有实现(2)。以下是我想要的示例输出:
grouping measurement_total group_size mean
1 1 301 60 5.0
2 2 215 40 5.4
让一些数据为:
> grouping <- c(1,2,1,1,2)
> measurement <- sample(rnorm(1,10),100, replace=TRUE)
> dataframe <- cbind(grouping, measurement)
要创建数据透视表,我使用了聚合。然后我使用cbind来获得每组的观察次数:
> aggregate(cbind(measurement,1) ~ grouping, data=dataframe, FUN=sum)
grouping measurement V2
1 1 301 60
2 2 215 40
我现在需要创建“V3”,这将是{measurement / V2},以便我实现结果。注意我只能通过使用FUN = mean得到平均值,但这意味着我也无法获得组大小。
> aggregate(cbind(measurement,1) ~ grouping, data=dataframe, FUN=mean)
grouping V2(# obs.) mean
1 1 1 5.0
2 2 1 5.4
有哪些选项可以简单地实现这一目标,理想情况下只需一行?即我可以分别获得两张桌子并合并两张桌子,但这有点啰嗦。
由于
约翰
答案 0 :(得分:1)
您可以使用dplyr
来轻松完成此操作
library(dplyr)
dataframe <- data.frame(dataframe) # Convert to dataframe
dataframe %>%
group_by(grouping) %>%
mutate(measurement_total = sum(measurement)) %>%
mutate(group_size = length(measurement)) %>%
mutate(mean = mean(measurement)) %>%
filter(row_number()==1) %>%
select(-measurement)
当然,在基地R中这样做的简单方法是:
df <- aggregate(cbind(measurement,1) ~ grouping, data=dataframe, FUN=sum)
df$mean <- df$measurement/df$V2
但如果你要进行数据帧操作,那么进入dplyr