确定哪个变量在多列组中出现最多

Identifying which variable occurs most in group with multiple columns

我还是 R 的新手,我需要一些帮助。 所以我有一个看起来像这样的数据集

a <- c("a", "b", "c", "d", "a", "d") 
E <- c(NA, "E", NA, "E", NA, "E")
F <- c(NA, "F", "F", "F", NA, NA)
G <- c("G", NA, "G", "G", "G", NA)

df <- data.frame (a, E, F, G)

我试图找出当我按 a 分组时,E、F 或 G 中哪一个在每组中出现最多。我最大的问题似乎是它们是三个不同列中的字​​符。我尝试将它们合并为一列,但没有用。在搜索了几个小时后,我一直在努力寻找答案,现在我只是对我认为应该是一个简单的问题感到困惑。任何帮助都会很棒。谢谢!

编辑:抱歉,我是这个网站的新手,我还在整理格式。所以正确的输出理想情况下应该是这样的。

  a   Mostcommon
  -   ----------
1  a     "G"
2  b    "E""F"
3  c    "F""G"
4  d     "E"

用我举的例子。根据我的实际数据,每组应该只有一个最常见的值。

这是你想做的吗?

library(tidyverse)

tibble(
  a = c("a", "b", "c", "d", "a", "d"),
  E = c("NA", "E", "NA", "E", "NA", "E"),
  F = c("NA", "F", "F", "F", "NA", "NA"),
  G = c("G", "NA", "G", "G", "G", "NA")
) |> 
  mutate(across(E:G, ~if_else(is.na(.), 0, 1))) |> 
  group_by(a) |> 
  summarise(across(E:G, sum))
#> # A tibble: 4 × 4
#>   a         E     F     G
#>   <chr> <dbl> <dbl> <dbl>
#> 1 a         0     0     2
#> 2 b         1     1     0
#> 3 c         0     1     1
#> 4 d         2     1     1

reprex package (v2.0.1)

于 2022-05-03 创建

您可以使用定义的模式函数 here。即我复制在这里烤它

Modes <- function(x) {
  ux <- unique(x)
  tab <- tabulate(match(x, ux))
  ux[tab == max(tab)]
}

现在使用模式功能,执行以下操作:

df %>%
  pivot_longer(-a, values_drop_na = TRUE)%>%
  group_by(a) %>%
  summarize(most_common = toString(Modes(value)))

# A tibble: 4 x 2
  a     most_common
  <chr> <chr>      
1 a     G          
2 b     E, F       
3 c     F, G       
4 d     E