有没有一种方法可以根据在R中用逗号分隔值的列对数据进行分组?

有没有一种方法可以根据在R中用逗号分隔值的列对数据进行分组?,r,dplyr,summary,R,Dplyr,Summary,假设存在数据帧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 使用函数separate_rows()from tidyr可以轻松实现这一点: library(tidyverse) dat <- tibble(A = c(1,

假设存在数据帧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

使用函数
separate_rows()
from tidyr可以轻松实现这一点:

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
库(tidyverse)
dat%
单独的_行(B,sep=“,”)%>%
组别(B)%>%
汇总(平均值=平均值(A))
#一个tibble:3x2
B是指
1第13类
2 GR12
3 GR22.5

这可以通过函数
从tidyr中分离行()
轻松完成:

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
库(tidyverse)
dat%
单独的_行(B,sep=“,”)%>%
组别(B)%>%
汇总(平均值=平均值(A))
#一个tibble:3x2
B是指
1第13类
2 GR12
3 GR22.5

base R
中的一个选项,在列“B”上使用
strsplit
创建
列表
,然后使用
tapply
,获得
rep
应用的“a”值的
平均值,其中组是
未列出的
分割值

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 

lst1在
base R
中的一个选项,在列“B”上使用
strsplit
创建
列表
,然后使用
tapply
,获得
rep
应用的“a”值的
平均值,其中组是
未列出的
分割值

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 
lst1