gpt4 book ai didi

r - 计算相似性百分比或计算 2 个以上对象之间的相关性

转载 作者:行者123 更新时间:2023-11-30 08:24:33 29 4
gpt4 key购买 nike

假设我有四个对象 (a,b,c,d),我要求五个人根据其物理外观或其他内容给它们贴上标签(类别 1 或 2)。五人为这些物体提供的标签如下

df <- data.frame(a = c(1,2,1,2,1), b=c(1,2,2,1,1), c= c(2,1,2,2,2), d=c(1,2,1,2,1))

以表格格式,

 ---------
a b c d
---------
1 1 2 1
2 2 1 2
1 2 2 1
2 1 2 2
1 1 2 1
----------

现在我想计算一组对象被赋予相同标签(1 或 2)的次数百分比。例如,对象a、b和d被5人中的3人给予相同的标签。所以它的百分比是 3/5 (=60%)。而由于对象a和d被所有人赋予相同的标签,因此其百分比为5/5(=100%)

我可以手动计算此统计数据,但在我的原始数据集中,我有 50 个这样的对象,人员为 30,标签为 4(1、2、3 和 4)。如何自动计算这个更大的数据集的统计数据? R 中是否有任何现有的软件包/工具可以计算此类统计信息?

注意:组可以是任意大小。在第一个示例中,组由 a、b 和 d 组成,而第二个示例组由 a 和 d 组成。

最佳答案

这里有两个任务:首先,列出所有相关组合,其次,评估和聚合行相似性。 combn 可以启动第一个任务,但是需要一些操作才能将结果排列成一个整齐的列表。第二个任务可以使用 prop.table 来处理,但这里直接计算更简单。

这里我使用了 tidyverse 语法(主要是 purrr,这对于处理列表很有帮助),但如果您愿意,可以转换为基数。

library(tidyverse)

map(2:length(df), ~combn(names(df), .x, simplify = FALSE)) %>% # get combinations
flatten() %>% # eliminate nesting
set_names(map_chr(., paste0, collapse = '')) %>% # add useful names
# subset df with combination, see if each row has only one unique value
map(~apply(df[.x], 1, function(x){n_distinct(x) == 1})) %>%
map_dbl(~sum(.x) / length(.x)) # calculate TRUE proportion

## ab ac ad bc bd cd abc abd acd bcd abcd
## 0.6 0.2 1.0 0.2 0.6 0.2 0.0 0.6 0.2 0.0 0.0

关于r - 计算相似性百分比或计算 2 个以上对象之间的相关性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40713096/

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