gpt4 book ai didi

r - 对于每个 `pop` 获取 `id` 元素的频率

转载 作者:行者123 更新时间:2023-12-04 10:51:48 26 4
gpt4 key购买 nike

考虑这个数据:

m = data.frame(pop=c(1,1,1,1,2,2,2,2,2,3,3,3,3,3,4,4),
id=c(0,1,1,1,1,1,0,2,1,1,1,2,1,2,2,2))

> m
pop id
1 1 0
2 1 1
3 1 1
4 1 1
5 2 1
6 2 1
7 2 0
8 2 2
9 2 1
10 3 1
11 3 1
12 3 2
13 3 1
14 3 2
15 4 2
16 4 2

我想获取每个唯一pop中每个唯一id的频率?例如,id 1<当 pop == 1 时, 在 4 次中出现 3 次,因此 pop 1id 1 的频率为 0.75。

我想到了这个丑陋的解决方案:

out = matrix(0,ncol=3)

for (p in unique(m$pop))
{
for (i in unique(m$id))
{
m1 = m[m$pop == p,]
f = nrow(m1[m1$id == i,])/nrow(m1)
out = rbind(out, c(p, f, i))
}
}
out = out[-1,]
colnames(out) = c("pop", "freq", "id")

# SOLUTION

> out
pop freq id
[1,] 1 0.25 0
[2,] 1 0.75 1
[3,] 1 0.00 2
[4,] 2 0.20 0
[5,] 2 0.60 1
[6,] 2 0.20 2
[7,] 3 0.00 0
[8,] 3 0.60 1
[9,] 3 0.40 2
[10,] 4 0.00 0
[11,] 4 0.00 1
[12,] 4 1.00 2

我确信使用 data.tabletable 存在更有效的解决方案,但找不到它。

最佳答案

这是我可能会做的:

as.data.frame(prop.table(table(m),1))
# pop id Freq
# 1 1 0 0.25
# 2 2 0 0.20
# 3 3 0 0.00
# 4 4 0 0.00
# 5 1 1 0.75
# 6 2 1 0.60
# 7 3 1 0.60
# 8 4 1 0.00
# 9 1 2 0.00
# 10 2 2 0.20
# 11 3 2 0.40
# 12 4 2 1.00

如果您希望它按pop 排序,您可以在之后进行。或者,您可以在转换为 data.frame 之前使用 t 转置表格;或在维度 2 上使用 rev(m)prop.table

关于r - 对于每个 `pop` 获取 `id` 元素的频率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30880347/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com