将列添加到显示变量频率的 Dataframe

qzwqbdag  于 2023-01-28  发布在  其他
关注(0)|答案(4)|浏览(140)

假设我有这样一个 Dataframe :

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)可以给我一个列联表,但是我不知道如何将表中的每个值Map到 Dataframe 中相应的条目,有人能帮忙吗?

    • 更新**

非常感谢您的帮助!出于兴趣,我运行了一个基准测试,看看merge、plyr和ave解决方案的运行情况如何。测试集是我最初的10 x~7mil数据集的10,000行子集。

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
xmakbtuz

xmakbtuz1#

这是一个带ave的基本R方式。

transform(d, freq.loc = ave(seq(nrow(d)), location, FUN=length))
w8ntj3qf

w8ntj3qf2#

我肯定有人会贴一个(丑;))aveplyr解决方案,下面是data.table解决方案:

library(data.table)
dt = data.table(your_df)

dt[, `freq-loc` := .N, by = location]
# note: using `-quotes around your var name, because of the "-" in the name
x9ybnkn6

x9ybnkn63#

使用基:table 然后 merge

merge(data, data.frame(table(location = data$location)), by = "location")
# location species Freq
# 1   boston       Q    1
# 2  buffalo       C    1
# 3   newark       J    1
# 4  seattle       A    2
# 5  seattle       D    2

另外,我听到了对plyr的请求:

library(plyr)
join(data, data.frame(table(location = data$location)))
# Joining by: location
# location species Freq
# 1  seattle       A    2
# 2  buffalo       C    1
# 3  seattle       D    2
# 4   newark       J    1
# 5   boston       Q    1
fjaof16o

fjaof16o4#

尝试在列名中使用破折号会非常痛苦。最好使用下划线或“点”。

dfrm$freq_loc <- ave( as.numeric(dat[[1]]), dat[["location"]] ,
                                                     FUN=length)

我尝试使用ave而不使用第一列中的as.numeric,但令我惊讶的是,得到了与因子水平相关的模糊错误消息。

相关问题