r - 跨组比较样本对的所有迭代(来自未配对的数据)
问题描述
我想通过平均它们之间所有可能的数据对的比较来比较两个不同的组。
可重现的例子
play <- data.frame(id = c(1:7), class=rep.int(100,7),group=c(rep.int(1,3),rep.int(2,4)), value=c(2,3,2,8,7,6,7))
id class group value
1 100 1 2
2 100 1 3
3 100 1 2
4 100 2 8
5 100 2 7
6 100 2 6
7 100 2 7
所以我有 7 个样本,都来自同一个班级,来自两个不同的组。我想要的是通过单独配对来自第 2 组和第 1 组样本的每个可能的值组合,然后对它们进行平均来计算第 2 组/第 1 组值的总体比率。
所以最终的输出值是8/2, 7/2, 6/2, 7/2, 8/3, 7/3, 6/3, 7/3, 8/2, 7/2, 6的平均值/2, 7/2 = 3.111
在我的完整数据集中,我还有更多的类,我只想在每个类中进行比较。每个类/组中的样本数量会略有不同。
我正在为如何解决这个问题而苦苦挣扎,并且担心我最终会陷入困境。
解决方案
您可以split
将列value
分成两个向量,然后调用expand.grid
以获取向量之间的所有元素对,然后使用 调用/
这些对中的每一对Reduce
,然后使用mean
.
library(data.table)
library(magrittr)
setDT(play2)
play2[, value %>%
split(-group) %>%
do.call(what = expand.grid) %>%
Reduce(f = `/`) %>%
mean
, by = class]
# class V1
# 1: 100 3.111111
# 2: 200 3.444444
使用的数据(从 AntoniosK 答案中窃取)
# example dataset
play2 <- data.frame(id = c(1:14),
class=c(rep.int(100,7), rep.int(200,7)),
group=c(rep.int(1,3),rep.int(2,4)),
value=c(2,3,2,8,7,6,7,2,3,2,8,7,6,10))
推荐阅读
- swift - 我可以按声明顺序对枚举的案例进行排序吗?
- php - 不使用任何标签的原始清洁数据
- python - Ansible Cisco 交换机“操作需要提权”*NetworkChuck 示例*
- python - 需要 Django 多列主键和外键使用示例
- python - 如何在 python 包中捆绑 JAR 并使其可用于 pyspark?
- loopback - Loopback4 MongoParseError:URI 格式错误
- mysql - mySQLd:内存不足(请查看我的 error.log)
- javascript - 将对象数组作为表格放置在单元格内:React JS
- c# - 如何让玩家在 3D 空间中移动?
- python - 从数据框列中提取国家名称 - Python