计算组中某个元素的出现次数而不进行汇总
Count the occurence of an element in the group without summarizing
我有这样的数据集:
x <- data.table(id=c(1,1,1,2,2,3,4,4,4,4), cl=c("a","b","c","b","b","a","a","b","c","a"))
我正在尝试根据 cl.
中的元素找出为每个组 (id) 选择一行的概率
我尝试了以下方法:
x[,num:=.N, keyby=.(id,cl)]
x[,den:=.N, keyby=.(id)]
x[,prob:=num/den, ]
有更好的方法吗?
最终,我的最终目标是在对每组 (id) 的一行进行采样时使用概率值作为权重。如果有任何更好的替代方法来达到这些权重,我们将不胜感激。
你的意思是这样的吗?
> x[, prob := prop.table(table(cl))[cl], id][]
id cl prob
1: 1 a 0.3333333
2: 1 b 0.3333333
3: 1 c 0.3333333
4: 2 b 1.0000000
5: 2 b 1.0000000
6: 3 a 1.0000000
7: 4 a 0.5000000
8: 4 b 0.2500000
9: 4 c 0.2500000
10: 4 a 0.5000000
或
> unique(x[, prob := prop.table(table(cl))[cl], id][])
id cl prob
1: 1 a 0.3333333
2: 1 b 0.3333333
3: 1 c 0.3333333
4: 2 b 1.0000000
5: 3 a 1.0000000
6: 4 a 0.5000000
7: 4 b 0.2500000
8: 4 c 0.2500000
解释:table
+ prop.table
给出了所有元素的频率table,这是命名值,因此我们使用[cl]
对频率进行子集化。
如果您的目的是根据观察到的频率生成随机样本:
x[, .N , by= .(id, cl)][, prop := N/sum(N), by = .(id)][]
# id cl N prop
# 1: 1 a 1 0.3333333
# 2: 1 b 1 0.3333333
# 3: 1 c 1 0.3333333
# 4: 2 b 2 1.0000000
# 5: 3 a 1 1.0000000
# 6: 4 a 2 0.5000000
# 7: 4 b 1 0.2500000
# 8: 4 c 1 0.2500000
我有这样的数据集:
x <- data.table(id=c(1,1,1,2,2,3,4,4,4,4), cl=c("a","b","c","b","b","a","a","b","c","a"))
我正在尝试根据 cl.
中的元素找出为每个组 (id) 选择一行的概率我尝试了以下方法:
x[,num:=.N, keyby=.(id,cl)]
x[,den:=.N, keyby=.(id)]
x[,prob:=num/den, ]
有更好的方法吗?
最终,我的最终目标是在对每组 (id) 的一行进行采样时使用概率值作为权重。如果有任何更好的替代方法来达到这些权重,我们将不胜感激。
你的意思是这样的吗?
> x[, prob := prop.table(table(cl))[cl], id][]
id cl prob
1: 1 a 0.3333333
2: 1 b 0.3333333
3: 1 c 0.3333333
4: 2 b 1.0000000
5: 2 b 1.0000000
6: 3 a 1.0000000
7: 4 a 0.5000000
8: 4 b 0.2500000
9: 4 c 0.2500000
10: 4 a 0.5000000
或
> unique(x[, prob := prop.table(table(cl))[cl], id][])
id cl prob
1: 1 a 0.3333333
2: 1 b 0.3333333
3: 1 c 0.3333333
4: 2 b 1.0000000
5: 3 a 1.0000000
6: 4 a 0.5000000
7: 4 b 0.2500000
8: 4 c 0.2500000
解释:table
+ prop.table
给出了所有元素的频率table,这是命名值,因此我们使用[cl]
对频率进行子集化。
如果您的目的是根据观察到的频率生成随机样本:
x[, .N , by= .(id, cl)][, prop := N/sum(N), by = .(id)][]
# id cl N prop
# 1: 1 a 1 0.3333333
# 2: 1 b 1 0.3333333
# 3: 1 c 1 0.3333333
# 4: 2 b 2 1.0000000
# 5: 3 a 1 1.0000000
# 6: 4 a 2 0.5000000
# 7: 4 b 1 0.2500000
# 8: 4 c 1 0.2500000