Преобразовать строковое значение в дату в R - PullRequest
0 голосов
/ 26 февраля 2019

У меня есть следующая таблица:

Year  Appearances
18/19     4
18/19     5
17/18     10
17/18     13
16/17     22
16/17     19

Есть ли способ конвертировать 18/19 в 2019?

А также есть способ добавить все«Появления» на каждый год вверх?Моя идеальная выходная таблица будет выглядеть так:

Year  Appearances
2019     9
2018     23
2017     41

Спасибо:)

Ответы [ 3 ]

0 голосов
/ 26 февраля 2019

Другая возможность dplyr с использованием sub() может быть:

df %>%
 group_by(Year = paste0("20", sub(".*/", "", Year))) %>%
 summarise_all(sum)

  Year  Appearances
  <chr>       <int>
1 2017           41
2 2018           23
3 2019            9

Извлекает символы после / и объединяет их с 20.

Или с использованием substr():

df %>%
 group_by(Year = paste0("20", substr(Year, nchar(Year)-1, nchar(Year)))) %>%
 summarise_all(sum)

Здесь он извлекает последние два символа из «Года» и объединяет их с 20.

0 голосов
/ 26 февраля 2019

Вы можете использовать этот однострочник из базы R.

aggregate(
    Appearances ~ Year, 
    transform(df, Year = sub(".*/(.*)", "20\\1", Year)), 
    sum
)
#   Year Appearances
# 1 2017          41
# 2 2018          23
# 3 2019           9
0 голосов
/ 26 февраля 2019

Мы можем удалить одну или несколько цифр (\\d+) в начале (^), а затем /str_remove), объединить с "20" (str_c), использовать это какпеременная группировки и получите sum из 'Появлений'

library(tidyverse)
df1 %>% 
  group_by(Year = str_c("20", str_remove(Year, "^\\d+\\/"))) %>% 
  summarise(Appearances = sum(Appearances))
# A tibble: 3 x 2
#  Year  Appearances
#  <chr>       <int>
#1 2017           41
#2 2018           23
#3 2019            9

data

df1 <- structure(list(Year = c("18/19", "18/19", "17/18", "17/18", "16/17", 
"16/17"), Appearances = c(4L, 5L, 10L, 13L, 22L, 19L)), 
   class = "data.frame", row.names = c(NA, 
 -6L))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...