我现在正在学习R.我觉得我的问题有一个非常简单的简洁答案,但我自己无法解决它。
我有一个大数据集。一列包含各种“类别”。我汇总了这些类别以获得每个类别的均值。所以,现在,我的聚合表看起来像这样:
类别 _ _平均
_ __ _ ____ a
B _ __ _ ____ b
C _ __ _ ____ c
等...
我现在想要取这些平均值并将其作为另一列合并到我的原始数据上。 所以,我希望它看起来像这样:
类别 _ ____ 平均值
B _ __ _ __ _ __ _ ___ b
A_的 _ __ _ __ _ __ _ __ _a
B_的 _ __ _ __ _ __ _ __ _b
C_的 _ __ _ __ _ __ _ __ _c
B_的 _ __ _ __ _ __ _ __ _b
C_的 _ __ _ __ _ __ _ __ _c
换句话说,我希望将每个类别与其对应的均值相匹配。我尝试过merge(),match()和不同的apply函数的变体。我的聚合表比原始数据小得多的事实导致了一些问题。
我可以使用这个简单问题的特定功能吗?提前谢谢。
答案 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
您可以更有效地使用plyr
,data.table
等更大的数据集。