Har*_*hid 8 statistics r machine-learning
考虑我有四个对象(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))
Run Code Online (Sandbox Code Playgroud)
以表格格式,
---------
a b c d
---------
1 1 2 1
2 2 1 2
1 2 2 1
2 1 2 2
1 1 2 1
----------
Run Code Online (Sandbox Code Playgroud)
现在我想计算一组对象被赋予相同标签(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
Run Code Online (Sandbox Code Playgroud)