группировка по совпадению строк - PullRequest
0 голосов
/ 17 сентября 2018

У меня есть такой фрейм данных:

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

Я хочу обобщить данные после их группировки.Я хочу, чтобы они были сгруппированы по номеру в v1, то есть одна группа была бы (jan1, feb1, mar1), другая была бы (jan2, feb2, mar2) и т. Д.

Я пробовал это,но это не работает:

df %>% group_by(str_detect(v1, '1')) %>% summarise(meanp = mean(v2),
                                 medianp = median(v2))

Ответы [ 2 ]

0 голосов
/ 17 сентября 2018

Опция с str_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  
0 голосов
/ 17 сентября 2018

Мы можем сделать

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

Часть group_by и gsub создает группирующую переменную на основе неалфавитных символов переменной v1, см. ?regex.

данные

set.seed(1)
df <- data.frame(v1 = c('jan1', 'jan2', 'jan3', 'jan4', 'feb1', 'feb2', 'mar1', 'mar2', 'mar3'),
                 v2 = rnorm(9))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...