我試圖在一個由大約1000名候選人和100道測驗題組成的資料集中找到最大的群組。每位候選人從100道測驗題中被問到15個問題。不同群組的人做的是同一組隨機抽樣的問題。我試圖找到最大的一組候選人,他們都做了同樣的測驗。
我在 R 中作業。資料框架有大約 1000 行和 100 列。每一串列示我們正在處理的測驗問題。對于每一行(候選人),除了候選人填寫了他或她所看到的特定問題外,所有列條目都是空的。這些問題實體中的輸入是0或1。(見圖)
是否有一個優雅的方法來解決這個問題?我唯一能想到的是使用 dplyer 并按 15 個問題子集進行過濾,然后檢查還剩下多少行。然而,在100列的情況下,這意味著它必須檢查(我想)15個選擇100種不同的可能性。非常感謝!
uj5u.com熱心網友回復:
我們可以根據NA模式推斷出佇列:
我們可以根據NA模式推斷出佇列。
library(tidyverse)
答案 <- tribble()
~候選人, ~ q1。 ~q2, ~q3,1,/span>0。 NA,NA,
2,/span>1。 NA,NA,
3,/span>0。 0,00
)
答案
#> # A tibble: 3 x 4
#> 候選人q1 q2 q3
#> <dbl> <dbl> <dbl> <dbl>/span>
#> 1 1 0 NA NA
#> 2 2 1 NA NA
#> 3 3 0 0 0
#通過NA模式推斷出佇列。
佇列<-
答案%>%
group_by(candidate) %>%
mutate_at(vars(-group_cols())。 ~ ifelse( is. na(. x), NA。 TRUE)) %> %
unite(-candidate。 col = "cohort")
組群
#> # A tibble: 3 x 2
#> # 群組:候選人[3]。
#> 候選組群
#> <dbl> <chr>
#> 1 1 TRUE_NA_NA
#> 2 2 TRUE_NA_NA
#> 3 3 TRUE_TRUE_TRUE
答案%>%
pivot_longer(-candidate) %>%
left_join(cohorts) %>%
# count filled answers per candidate and cohort.
group_by(cohort, candidate) %>%
filter(! is. na(value) %>%
count() %> %
# 得到最大的佇列
arrange(-n) %>%
拉(cohort) %>%
first()
#>加入,由="候選"。
#> [1] "TRUE_TRUE_TRUE"/span>
創建于2021-09-21,由reprex包(v2.0.1)
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/326394.html
標籤:
下一篇:根據資料框架進行加權計算
