有没有一种方法可以根据在 R 中用逗号分隔值的列对数据进行分组?
Is there a way to group data based on a column that separates values with commas in R?
假设有数据框 A:
A B
1 1 gr1, gr2
2 3 class1, gr1
3 4 gr2
有没有办法汇总 B 列中每个逗号分隔字母的数据?
例如,像这样得到它们的平均值:
group mean
1 gr1 2
2 gr2 2.5
3 class1 3
这可以通过 tidyr 中的函数 separate_rows()
轻松完成:
library(tidyverse)
dat <-
tibble(A = c(1, 3, 4),
B = c("gr1, gr2", "class1, gr1", "gr2"))
dat %>%
separate_rows(B, sep = ", ") %>%
group_by(B) %>%
summarize(mean = mean(A))
# A tibble: 3 x 2
B mean
<chr> <dbl>
1 class1 3
2 gr1 2
3 gr2 2.5
base R
中的一个选项,在 'B' 列上使用 strsplit
创建一个 list
,然后使用 tapply
,得到 mean
的 rep
关联 'A' 值,其中该组 unlist
ed 分割值
lst1 <- with(df1, strsplit(B, ",\s+"))
tapply(rep(df1$A, lengths(lst1)), unlist(lst1), FUN = mean)
# class1 gr1 gr2
# 3.0 2.0 2.5
假设有数据框 A:
A B
1 1 gr1, gr2
2 3 class1, gr1
3 4 gr2
有没有办法汇总 B 列中每个逗号分隔字母的数据? 例如,像这样得到它们的平均值:
group mean
1 gr1 2
2 gr2 2.5
3 class1 3
这可以通过 tidyr 中的函数 separate_rows()
轻松完成:
library(tidyverse)
dat <-
tibble(A = c(1, 3, 4),
B = c("gr1, gr2", "class1, gr1", "gr2"))
dat %>%
separate_rows(B, sep = ", ") %>%
group_by(B) %>%
summarize(mean = mean(A))
# A tibble: 3 x 2
B mean
<chr> <dbl>
1 class1 3
2 gr1 2
3 gr2 2.5
base R
中的一个选项,在 'B' 列上使用 strsplit
创建一个 list
,然后使用 tapply
,得到 mean
的 rep
关联 'A' 值,其中该组 unlist
ed 分割值
lst1 <- with(df1, strsplit(B, ",\s+"))
tapply(rep(df1$A, lengths(lst1)), unlist(lst1), FUN = mean)
# class1 gr1 gr2
# 3.0 2.0 2.5