dplyr按字符串分组匹配

dplyr按字符串分组匹配,r,group-by,dplyr,R,Group By,Dplyr,我有这样一个数据框: df <- data.frame(v1 = c('jan1', 'jan2', 'jan3', 'jan4', 'feb1', 'feb2', 'mar1', 'mar2', 'mar3'), v2 = rnorm(9)) 我们能做到 library(dplyr) df %>% group_by(grp = gsub("\\D", "", v1)) %>% summarise(mean_v2 = mean(v2))

我有这样一个数据框:

df <- data.frame(v1 = c('jan1', 'jan2', 'jan3', 'jan4', 'feb1', 'feb2', 'mar1', 'mar2', 'mar3'),
             v2 = rnorm(9))
我们能做到

library(dplyr)
df %>% 
  group_by(grp = gsub("\\D", "", v1)) %>% 
  summarise(mean_v2 = mean(v2)) # only for illustration
# A tibble: 4 x 2
#  grp   mean_v2
#  <chr>   <dbl>
#1 1      0.0635
#2 2      0.0338
#3 3     -0.130 
#4 4      1.60
我们能做到

library(dplyr)
df %>% 
  group_by(grp = gsub("\\D", "", v1)) %>% 
  summarise(mean_v2 = mean(v2)) # only for illustration
# A tibble: 4 x 2
#  grp   mean_v2
#  <chr>   <dbl>
#1 1      0.0635
#2 2      0.0338
#3 3     -0.130 
#4 4      1.60

带有
str\u remove

library(tidyverse)
df %>% 
  group_by(grp = str_remove(v1, "\\D+")) %>% 
  summarise(mean_v2 = mean(v2))
# A tibble: 4 x 2
#  grp   mean_v2
#  <chr>   <dbl>
#1 1      0.0635
#2 2      0.0338
#3 3     -0.130 
#4 4      1.60  
库(tidyverse)
df%>%
分组依据(grp=str删除(v1,\\D+))%>%
总结(平均值=平均值(v2))
#一个tibble:4x2
#grp平均值
#     
#1 1      0.0635
#2 2      0.0338
#3 3     -0.130 
#4 4      1.60  

带有
str\u remove的选项

library(tidyverse)
df %>% 
  group_by(grp = str_remove(v1, "\\D+")) %>% 
  summarise(mean_v2 = mean(v2))
# A tibble: 4 x 2
#  grp   mean_v2
#  <chr>   <dbl>
#1 1      0.0635
#2 2      0.0338
#3 3     -0.130 
#4 4      1.60  
库(tidyverse)
df%>%
分组依据(grp=str删除(v1,\\D+))%>%
总结(平均值=平均值(v2))
#一个tibble:4x2
#grp平均值
#     
#1 1      0.0635
#2 2      0.0338
#3 3     -0.130 
#4 4      1.60  
请提供具有代表性的样本数据。您声明希望按
v1
分组,但在您提供的示例数据中
v1
仅采用一个值。我也不明白你想用
groupby(str\u detect(v1,'1'))
做什么。为什么不干脆
分组依据(v1)
?请提供具有代表性的样本数据。您声明希望按
v1
分组,但在您提供的示例数据中
v1
仅采用一个值。我也不明白你想用
groupby(str\u detect(v1,'1'))
做什么。为什么不按(v1)分组呢?