确定哪个变量在多列组中出现最多
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
我还是 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