R Dplyr и строковые значения, как разбить и получить второй элемент?vapply / sapply - PullRequest
0 голосов
/ 04 октября 2018

У меня были трудности с этой манипуляцией с одним фреймом данных в R. У меня есть два столбца для высоты лунки и строки даты и времени ("гггг-мм-дд ЧЧ: ММ: сс").

IЯ хотел бы извлечь все строки из этой таблицы, которые происходят в полночь (00:00:00).

Я мог бы манипулировать этой таблицей в считанные секунды с помощью Python, но я хочу выяснить это в R использование strsplit () вместо POSIXct.

Как изменить таблицу так, чтобы я разбил строку даты и времени и извлек только значение времени в новый столбец?

Я думаю, что ответ на этот вопрос в vapply, но последние пару недель я копался в руководствах и до сих пор не могу понять это.

Ответы [ 2 ]

0 голосов
/ 04 октября 2018

Добро пожаловать на SO.это можно сделать несколькими способами.Попробуйте это:

## some data
df <- data.frame(height=c(11,12),time = c("1999-9-9 00:00:00","1999-9-9 00:00:02"),stringsAsFactors = FALSE)

df
#>   height              time
#> 1     11 1999-9-9 00:00:00
#> 2     12 1999-9-9 00:00:02

## In base R

df2<- df
df2$hms <- do.call(rbind,strsplit(df2$time," "))[,2]
df2[df2$hms=="00:00:00",]
#>   height              time      hms
#> 1     11 1999-9-9 00:00:00 00:00:00

## In tidyverse

library(dplyr)
df3 <- df %>%
  mutate(hms = gsub(".*(..:..:..).*","\\1",time)) %>%
  filter(hms == "00:00:00")

df3
#>   height              time      hms
#> 1     11 1999-9-9 00:00:00 00:00:00

Создано в 2018-10-04 пакетом Представлять (v0.2.1)

0 голосов
/ 04 октября 2018

Вы не приводите пример, поэтому вот мое предположение:

Допустим, у вас есть вектор символов (может быть столбцом):

dateTimes <- c("1999-01-01 11:11:11", "1999-01-01 12:12:12", "1999-01-01 13:13:13")

Вы извлекаете времяв конце:

ans <- sub(".*-\\d+\\s", "", dateTimes, perl = T)
#[1] "11:11:11" "12:12:12" "13:13:13"

Сохраните их в новую переменную или столбец:

Если вы хотите извлечь строки, которые встречаются в 00:00:00, просто используйте сравнение строк и подмножество ваших данных:

df1[ans == "00:00:00",]
...