Подмножество списка фреймов данных по времени - PullRequest
0 голосов
/ 02 февраля 2020

У меня есть данные GPS в нескольких файлах .csv, которые я импортировал со следующим кодом:

library(readr)
library(tidyverse)

# Data import from target folder

filelist <- list.files("data", pattern = "*.csv")

  filenames <- paste(mgsub::mgsub(filelist, 
                                           c("_", "samples.csv", "[[:digit:]]+"), 
                                           c("", "", "")), sep = "")

  setwd("data")

  data <- sapply(filelist, 
                 read_csv,
                 col_types = cols(Uhrzeit = col_time(format = "%H:%M:%OS"), 
                                  Uhrzeit_1 = col_time(format = "%H:%M:%OS")),
                 simplify = FALSE)



  names(data) <- filenames


  colnames <- c("Aufnahmezeit", 
                "Uhrzeit", 
                "Herzfrequenz [S/min]", 
                "Geschwindigkeit [km/h]", 
                "Distanz [m]", 
                "Beschleunigung [m/s²]", 
                "Schrittfrequenz")

  data <- lapply(data, setNames, colnames)

Это возвращает несколько фреймов данных (в настоящее время 5) примерно по 70000 строк в каждом (см. Один пример ниже):

str(data)

List of 5
 $ MaxBauer     :Classes ‘spec_tbl_df’, ‘tbl_df’, ‘tbl’ and 'data.frame':   69012 obs. of  7 variables:
  ..$ Aufnahmezeit          : 'hms' num [1:69012] 00:00:00.0 00:00:00.1 00:00:00.2 00:00:00.3 ...
  .. ..- attr(*, "units")= chr "secs"
  ..$ Uhrzeit               : 'hms' num [1:69012] 12:54:13.0 12:54:13.1 12:54:13.2 12:54:13.3 ...
  .. ..- attr(*, "units")= chr "secs"
  ..$ Herzfrequenz [S/min]  : num [1:69012] NA NA NA NA NA NA NA NA NA NA ...
  ..$ Geschwindigkeit [km/h]: num [1:69012] 0 0 0 0 0 0 0 0 0 0 ...
  ..$ Distanz [m]           : num [1:69012] 0 0 0 0 0 0 0 0 0 0 ...
  ..$ Beschleunigung [m/s²] : num [1:69012] 0 0 0 0 0 0 0 0 0 0 ...
  ..$ Schrittfrequenz       : num [1:69012] NA NA NA NA NA NA NA NA NA NA ...
  ..- attr(*, "spec")=
  .. .. cols(
  .. ..   Uhrzeit = col_time(format = "%H:%M:%OS"),
  .. ..   Uhrzeit_1 = col_time(format = "%H:%M:%OS"),
  .. ..   `HF [S/min]` = col_double(),
  .. ..   `Geschwindigkeit [km/h]` = col_double(),
  .. ..   `Distanz [m]` = col_double(),
  .. ..   `Beschleunigung [m/s²]` = col_double(),
  .. ..   Schrittfrequenz = col_double()
  .. .. )

Теперь я хотел бы разместить данные, используя переименованный столбец «Uhrzeit» в качестве контрольной точки. Я попробовал следующее:

lapply(data, subset(Uhrzeit >= 46000))

, который вернул эту ошибку:

Error in subset.default(data, Uhrzeit >= 46000) : 
  object 'Uhrzeit' not found

Я понял, что мне нужно создать список для функции lapply для работы, например, as.list ( данные), но не смог заставить это работать.

Любая помощь будет принята с благодарностью!

Ответы [ 2 ]

1 голос
/ 02 февраля 2020

Мы можем использовать base R с [

lapply(data, function(x) x[x$Uhrzeit >= 46000,])

Если мы намереваемся ! использовать анонимную функцию с subset

lapply(data, subset, subset = Uhrzeit >= 46000)

Или используя data.table

library(data.table)
lapply(data, function(x) as.data.table(x)[Uhrzeit >= 46000])
1 голос
/ 02 февраля 2020

Попробуйте:

lapply(data, function(x) subset(x, Uhrzeit >= 46000))

Или с dplyr и map

library(dplyr)
purrr::map(data, ~.x %>% filter(Uhrzeit >= 46000))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...