根据 R 中的重复计数字符串计算分数权重



我想根据同一组 (ID( 中的观测值数量为我的观测值分配相等的权重,即 frac_weight = 1/count(相同的 ID(

ID          frac_weight
FSGBR070N3  0.333333333
FSGBR070N3  0.333333333
FSGBR070N3  0.333333333
FS00008L4G  1
FS00008VLD  0.333333333
FS00008VLD  0.333333333
FS00008VLD  0.333333333
FS00009SQX  0.5
FS00009SQX  0.5
FSUSA0A1KW  0.5
FSUSA0A1KW  0.5
FSUSA0A1KX  1
FSUSA0A1KY  1
FS0000B389  0.5
FS0000B389  0.5
FSUSA09AX9  1

这可能是一行,但我只能在这个论坛中找到更复杂的帖子。我从:

ID_vec <- dat$ID

从我的数据帧中挑出 ID 列

谢谢 威廉·幻想家。

尝试函数ave

ID_vec <- dat$ID
frac_w <- as.numeric(ave(ID_vec, ID_vec, FUN = function(x) 1/length(x)))
all.equal(dat$frac_weight, frac_w)
[1] TRUE

重要提示:如果class(dat$ID)返回factor则必须这样做

ID_vec <- as.character(dat$ID)

该应用程序似乎非常适合以某种方式使用table

不过,它比Rui Barradas的答案多了一行:

inds <- sapply(df$ID, function(x){which(names(table(df$ID)) == x)})
1/(table(df$ID)[inds])
# FSGBR070N3 FSGBR070N3 FSGBR070N3 FS00008L4G FS00008VLD FS00008VLD FS00008VLD 
# 0.3333333  0.3333333  0.3333333  1.0000000  0.3333333  0.3333333  0.3333333 
# FS00009SQX FS00009SQX FSUSA0A1KW FSUSA0A1KW FSUSA0A1KX FSUSA0A1KY FS0000B389 
# 0.5000000  0.5000000  0.5000000  0.5000000  1.0000000  1.0000000  0.5000000 
# FS0000B389 FSUSA09AX9 
# 0.5000000  1.0000000 

最新更新