按包含元素列表的变量中的元素对数据框进行分组
Group data frame by elements from a variable containing lists of elements
我想执行一个重要的 group_by
,通过 单个元素 在其变量之一中找到的列表对数据框进行分组和汇总。
df <- data.frame(x = 1:5)
df$y <- list("A", c("A", "B"), "C", c("B", "D", "C"), "E")
df
x y
1 1 A
2 2 A, B
3 3 C
4 4 B, D, C
5 5 E
现在按 y
分组(并计算行数),这是一个包含元素列表的变量,所需的最终结果应该是:
data.frame(group = c("A", "B", "C", "D", "E"), n = c(2,2,2,1,1))
group n
1 A 2
2 B 2
3 C 2
4 D 1
5 E 1
因为"A"出现在2行,"B"出现在2行,等等
注意:n
的总和不一定等于数据框中的行数。
我们可以使用 简单的基础 R 解决方案和 table
来计算 unlist
ing list
之后的频率,然后创建一个 data.table
基于那个 table 对象
tbl <- table(unlist(df$y))
data.frame(group = names(tbl), n = as.vector(tbl))
# group n
#1 A 2
#2 B 2
#3 C 2
#4 D 1
#5 E 1
或 tidyverse
的另一个选项
library(dplyr)
library(tidyr)
unnest(df) %>%
group_by(group = y) %>%
summarise(n=n())
# <chr> <int>
#1 A 2
#2 B 2
#3 C 2
#4 D 1
#5 E 1
或者如评论中提到的@alexis_laz,另一种选择是as.data.frame.table
as.data.frame(table(group = unlist(df$y)), responseName = "n")
简单的基础 R 解决方案:(实际上这是一个重复的问题,但无法找到它)
sapply(unique(unlist(df$y)), function(x) sum(grepl(x, df$y))
# A B C D E
# 2 2 2 1 1
我想执行一个重要的 group_by
,通过 单个元素 在其变量之一中找到的列表对数据框进行分组和汇总。
df <- data.frame(x = 1:5)
df$y <- list("A", c("A", "B"), "C", c("B", "D", "C"), "E")
df
x y
1 1 A
2 2 A, B
3 3 C
4 4 B, D, C
5 5 E
现在按 y
分组(并计算行数),这是一个包含元素列表的变量,所需的最终结果应该是:
data.frame(group = c("A", "B", "C", "D", "E"), n = c(2,2,2,1,1))
group n
1 A 2
2 B 2
3 C 2
4 D 1
5 E 1
因为"A"出现在2行,"B"出现在2行,等等
注意:n
的总和不一定等于数据框中的行数。
我们可以使用 简单的基础 R 解决方案和 table
来计算 unlist
ing list
之后的频率,然后创建一个 data.table
基于那个 table 对象
tbl <- table(unlist(df$y))
data.frame(group = names(tbl), n = as.vector(tbl))
# group n
#1 A 2
#2 B 2
#3 C 2
#4 D 1
#5 E 1
或 tidyverse
library(dplyr)
library(tidyr)
unnest(df) %>%
group_by(group = y) %>%
summarise(n=n())
# <chr> <int>
#1 A 2
#2 B 2
#3 C 2
#4 D 1
#5 E 1
或者如评论中提到的@alexis_laz,另一种选择是as.data.frame.table
as.data.frame(table(group = unlist(df$y)), responseName = "n")
简单的基础 R 解决方案:(实际上这是一个重复的问题,但无法找到它)
sapply(unique(unlist(df$y)), function(x) sum(grepl(x, df$y))
# A B C D E
# 2 2 2 1 1