我想根据同一组 (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