使用描述其他列

时间:2015-12-04 16:39:29

标签: r dataframe aggregate

我试图调整一些数据,以便检索(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

有哪些选项可以简单地实现这一目标,理想情况下只需一行?即我可以分别获得两张桌子并合并两张桌子,但这有点啰嗦。

由于

约翰

1 个答案:

答案 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

可能是个好主意。