r - R操作除以分组求和序列中的非零观测值的数量
问题描述
我正在尝试解决一个问题,该问题涉及一对项目在组中出现的比例总和。问题是我以前的帖子的后续,可以在这里找到
我的数据如下:
data <- data.frame(group = c(1,1,1,1,2,2,2,2,3,3,3,3),
item = c("Wheat", "Coal", "Steel", "Iron", "Wheat", "Coal", "Steel", "Iron", "Wheat", "Coal", "Steel", "Iron"),
quantity = c(5,10,0,5,20,5,10,0,0,10,15,15),
proportion = c(0.25,0.5,0,0.25,0.57,0.14,0.29,0,0,0.25,0.375,0.375))
result.rep <- crossing(item1 = data$item,
item2 = data$item,
group = data$group) %>%
filter(item1 < item2) %>%
left_join(data, by = c("item1" = "item", "group")) %>%
left_join(data, by = c("item2" = "item", "group")) %>%
mutate(interrelation = proportion.x * proportion.y / 3) %>%
group_by(item1, item2) %>%
dplyr::summarize(result = sum(interrelation), .groups = "drop")
我仍然面临的问题是,在真实数据中,我有 115 个不同的项目,而不是可重现数据中的 4 个。同样在真实数据中,某些项目从未出现在同一组中。因此,我除以的数字(在可重现的示例中为 3)应该在实际数据中有所不同,具体取决于观察到的组内有多少非零对。
我修改了原始的可重现数据以包括变化非零对的问题:
data <- data.frame(group = c(1,1,1,1,2,2,2,2,3,3,3,3),
item = c("Wheat", "Coal", "Steel", "Iron", "Wheat", "Coal", "Steel", "Iron", "Wheat", "Coal", "Steel", "Iron"),
quantity = c(5,10,0,5,20,5,0,0,0,10,15,15),
proportion = c(0.25,0.5,0,0.25,0.8,0.2,0,0,0,0.25,0.375,0.375))
在修改后的数据中,Wheat 和 Steel 永远不会同时出现在具有非零值的同一组中。因此,这些项目可能具有的非零对数为 2(小麦 - 煤,小麦 - 铁)。而对于项目 Coal,它有 3 个非零对(煤 - 小麦、煤 - 铁、煤 - 钢),因为它以非零值与其他每个项目一起出现在一个组中至少一次。
总之,除数应根据每个项目具有的非零对的数量而变化。
求和序列中是否存在循环操作来解释这种特殊性?
解决方案
推荐阅读
- javascript - 为什么 Chart js 第一个柱太小或根本不显示?
- google-apps-script - 是否有创建循环来替换数据的功能?
- operators - 是否可以在 Raku 中定义一个新的运算符并控制其优先级?
- mongodb - 组聚合中的 MongoDb 自定义累加器
- javascript - 我可以将变量作为值分配给对象的键吗?
- imagemagick - 将所有 jpg 图像转换为 webp Magick
- linux - 在正则表达式中使用时,管道和空间会出现问题
- python - 为什么我的质数代码在 CodeWars 上超时?
- kapacitor - Kapacitor:屏障节点做什么?以及如何以及何时使用 .delete?
- python - 有没有办法调用类对象线程的方法并让它在该特定线程中运行?