在R中,我尝试根据发布商在我的数据中出现的次数在我的调查中分配权重并对其进行加权,以便每条记录同样代表每个发布者
说我有这样的数据框:
ID site
1 publisherA
2 PublisherB
3 PublisherC
4 PublisherA
5 PublisherD
我想在此框架中附加一列,其权重取决于数据所在网站的过度/不足代表:
site weight
1 publisherA 0.625 #publisher A appears 2/5 times and is weighted to match 1/4 (4 publishers)
2 PublisherB 1.25 #publisher B appears 1/5 times and is weighted to match 1/4
3 PublisherC 1.25
4 PublisherA 0.625
5 PublisherD 1.25
我还在另一组数据上使用权重包和anesrake包进行耙,但我觉得有一种更简单的方法来完成这一项任务,而不是在一个变量上耙。
答案 0 :(得分:1)
您可以使用site
按NROW(df)/ave(seq_along(df$ID), df$site, FUN = length)/length(unique(df$site))
#[1] 0.625 1.250 1.250 0.625 1.250
进行分组,并计算每个发布商的外观。
df = structure(list(ID = 1:5, site = c("PublisherA", "PublisherB",
"PublisherC", "PublisherA", "PublisherD")), .Names = c("ID",
"site"), class = "data.frame", row.names = c(NA, -5L))
<小时/> 数据强>
{{1}}
答案 1 :(得分:0)
我们也可以使用table
df$weight <- with(df, c((length(site)/table(site)/length(unique(site)))[site]))
df$weight
#[1] 0.625 1.250 1.250 0.625 1.250