如何将已计算的均值与原始数据集相匹配?

时间:2014-02-20 21:43:01

标签: sql r

我现在正在学习R.我觉得我的问题有一个非常简单的简洁答案,但我自己无法解决它。

我有一个大数据集。一列包含各种“类别”。我汇总了这些类别以获得每个类别的均值。所以,现在,我的聚合表看起来像这样:

类别 _ _平均

_ __ _ ____ a

B _ __ _ ____ b

C _ __ _ ____ c

等...

我现在想要取这些平均值并将其作为另一列合并到我的原始数据上。 所以,我希望它看起来像这样:

类别 _ ____ 平均值

B _ __ _ __ _ __ _ ___ b

A_的 _ __ _ __ _ __ _ __ _a

B_的 _ __ _ __ _ __ _ __ _b

C_的 _ __ _ __ _ __ _ __ _c

B_的 _ __ _ __ _ __ _ __ _b

C_的 _ __ _ __ _ __ _ __ _c

换句话说,我希望将每个类别与其对应的均值相匹配。我尝试过merge(),match()和不同的apply函数的变体。我的聚合表比原始数据小得多的事实导致了一些问题。

我可以使用这个简单问题的特定功能吗?提前谢谢。

1 个答案:

答案 0 :(得分:0)

在基地R:

data <- data.frame(Category=c(rep("A",3), rep("B",4), rep("C",2)), Value=1:9)
> data
  Category Value
1        A     1
2        A     2
3        A     3
4        B     4
5        B     5
6        B     6
7        B     7
8        C     8
9        C     9

> avg <- lapply(split(data$Value, data$Category), mean)
$A
[1] 2

$B
[1] 5.5

$C
[1] 8.5

> data$Averages <- avg[data$Category]
> data
  Category Value Averages
1        A     1        2
2        A     2        2
3        A     3        2
4        B     4      5.5
5        B     5      5.5
6        B     6      5.5
7        B     7      5.5
8        C     8      8.5
9        C     9      8.5

您可以更有效地使用plyrdata.table等更大的数据集。