假设我有这样一个数据框:
location species
1 seattle A
2 buffalo C
3 seattle D
4 newark J
5 boston Q
我希望在此数据框中添加一列,显示每个位置在数据集中出现的次数,结果如下所示:
location species freq-loc
1 seattle A 2 #there are 2 entries with location=seattle
2 buffalo C 1 #there is 1 entry with location=buffalo
3 seattle D 2
4 newark J 1
5 boston Q 1
我知道使用
table(data$location)
可以给我提供一个列联表。但我不知道如何将表中的每个值映射到数据框中相应的条目。有人能帮忙吗?
更新 非常感谢所有的帮助!只是出于兴趣,我进行了一项基准测试,以查看与彼此相比,合并、plyr和ave解决方案的运行情况。测试集是我的原始10 x ~700万数据集的10000行子集。
Unit: milliseconds
expr min lq median uq max neval
MERGE 110.877337 111.989406 112.585420 113.51679 120.23588 100
PLYR 26.305645 27.080403 27.576580 27.87157 68.40763 100
AVE 2.994528 3.117255 3.179898 3.35834 10.02955 100
plyr
解决方案是:ddply(df, .(location), mutate, freq.loc = length(location))
。 - eddiplyr
框架下,是指“概念上正确”,而不是更快。我不能说我关心它们的速度,因为我坚定地站在“data.table
做得更好”的阵营里,但如果你感兴趣,那么你应该去做并发布结果。如果你这样做,最好使用像microbenchmark
这样的基准测试包。 - eddi