Как убрать текст с обеих сторон символа? - PullRequest
0 голосов
/ 08 марта 2020

Как я могу преобразовать столбец символов, записанных как

c("0 y", "0 m", "23 d", "0 y",  "0 m", "8 d")

в числовые значения

c(0, 0, 23, 0, 0, 0)

пример того, о чем я говорю

enter image description here

еще один пример, который имеет несколько одинарных ди git дат

enter image description here

Ответы [ 4 ]

0 голосов
/ 08 марта 2020

Вы можете попробовать это регулярное выражение захвата с gsub, который фиксирует любые числа перед "d" и не делает никаких предположений об остальной части строки:

x <- c("0 y, 0 m, 12 d", "0 y, 0 m, 13 d", "0 y, 0 m, 12 d", "0 y, 0 m, 15 d") 
gsub("^.*(\\d+) d.*$", "\\1", x)
#> [1] "2" "3" "2" "5"
0 голосов
/ 08 марта 2020

Вы можете использовать пакет lubridate для разбора строки на объект периода, затем вы можете использовать функции экстрактора для извлечения любых компонентов, которые могут вас заинтересовать. Используя данные примера dcarlson:

library(lubridate)
day(period(c("0 y, 0 m, 12 d", "0 y, 0 m, 13 d", "0 y, 0 m, 12 d", "0 y, 0 m, 15 d") ))

[1] 12 13 12 15
0 голосов
/ 08 марта 2020

Мы можем использовать sub для захвата цифр перед пробелом, за которым следует 'd'

as.integer(sub(".*\\s(\\d+) d", "\\1", v1))
#[[1] 12 13 12 15 12

Или с regmatches/regexpr

regmatches(v1, regexpr("(\\d+)(?= d$)", v1, perl = TRUE))
#[1] "12" "13" "12" "15" "12"

Если нам нужно преобразовать все дни, то

library(dplyr)
library(tidyr)
tibble(col1 = v1) %>% 
  tidyr::extract(col1, into = c('year', 'month', 'day'),
       "^(\\d+) y, (\\d+) m, (\\d+) d$",  convert = TRUE) %>% 
  transmute(days = year * 365 + month * 30 + day)

data

v1 <- c("0 y, 0 m, 12 d", "0 y, 0 m, 13 d", "0 y, 0 m, 12 d",
        "0 y, 0 m, 15 d", "1 y, 2 m, 12 d")
0 голосов
/ 08 марта 2020

Предполагая, что y и m всегда равны 0

Oy.date.diff <- c("0 y, 0 m, 12 d", "0 y, 0 m, 13 d", "0 y, 0 m, 12 d", "0 y, 0 m, 15 d") 
as.numeric(gsub(" d", "", gsub("0 y, 0 m, ", "", Oy.date.diff)))
# [1] 12 13 12 15

Обратите внимание, что R не позволяет переменным (или столбцам) начинаться с di git, поэтому первым символом является заглавная буква O.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...