Я сам работаю с данными движения и предлагаю другую структуру ваших данных.Я действительно думаю, что это облегчит вам анализ данных в будущем.
Что касается количества строк - я думаю, что этот код облегчит выявление любых потенциальных ошибок в ваших данных.
СначалаЯ создаю некоторые данные, чтобы имитировать вашу структуру.Я создаю только три CSV-файла.
library(tidyverse)
library(here)
#Create some csv files
curve_left_step = rnorm(16, 0, 1)
stand_to_sit = rnorm(16, 20, 2)
jump_one_leg = rnorm(16, 15, 1)
write.csv(curve_left_step, here("Subject02_Aufnahme000.csv"))
write.csv(stand_to_sit, here("Subject02_Aufnahme002.csv"))
write.csv(jump_one_leg, here("Subject02_Aufnahme004.csv"))
Я импортирую эти файлы в R, используя purrr.Это сохраняет все данные в одном кадре данных.Я также добавляю столбец метки.
#Import the csv files into R using purrr
data_all <- tibble(
path = list.files(path = here(), pattern = "Subject", full.names = TRUE)) %>%
mutate(
data = map(.x=path, ~read.csv(file = .x)),
label = c("curve_left_step", "stand_to_sit", "jump_one_leg"))
Сила этой структуры данных в том, что вы можете применять функции к небольшим наборам данных (столбцу данных) в объекте data_all.
Во-первых,мы создаем такую функцию:
#Create a function that splits the data into 4 and keeps a selected quarter
split_and_calc <- function(.data, ...){
.data %>%
#Divide into quarters
mutate(
quarter = ceiling(row_number()/4)) %>%
#Select the quarter of interest
filter(quarter == ...) %>%
#Select the variable of interest. here it is [[2]], but in your data this is likely different
select(2) %>%
summarise_all(.funs = c("mean", "median", "sd", "min", "max"))
}
Теперь мы применяем функцию ко всем маленьким фреймам данных в столбце данных:
#Apply the function to all dataframes in data column in data_all
data_all <- data_all %>%
mutate(
quarter1 = map(.x=data, ~split_and_calc(.x, 1)),
quarter2 = map(.x=data, ~split_and_calc(.x, 2)),
quarter3 = map(.x=data, ~split_and_calc(.x, 3)),
quarter4 = map(.x=data, ~split_and_calc(.x, 4)))
> data_all
# A tibble: 3 x 7
path data label quarter1 quarter2 quarter3 quarter4
<chr> <list> <chr> <list> <list> <list> <list>
1 C:/Users/sharsted/OneDrive/R/R club/Facebook help/Subject02_~ <data.frame [16 x~ curve_left_s~ <data.frame [1 x ~ <data.frame [1 x~ <data.frame [1 x~ <data.frame [1 x~
2 C:/Users/sharsted/OneDrive/R/R club/Facebook help/Subject02_~ <data.frame [16 x~ stand_to_sit <data.frame [1 x ~ <data.frame [1 x~ <data.frame [1 x~ <data.frame [1 x~
3 C:/Users/sharsted/OneDrive/R/R club/Facebook help/Subject02_~ <data.frame [16 x~ jump_one_leg <data.frame [1 x ~ <data.frame [1 x~ <data.frame [1 x~ <data.frame [1 x~
Ваши данные из отдельных файлов .csv теперь сохраняютсяв столбце данных, в то время как Quarter1 содержит среднее, медиану, sd, min и max для 1 квартала данных, а также для кварталов 2,3 и 4.
Допустим, вы хотите получить доступ к вашим итоговым значениямс 1 квартала.Вы можете сделать следующий код:
data_all %>%
select(label, quarter1) %>%
unnest()
# A tibble: 3 x 6
label mean median sd min max
<chr> <dbl> <dbl> <dbl> <dbl> <dbl>
1 curve_left_step -0.360 -0.384 0.833 -1.13 0.458
2 stand_to_sit 20.9 21.0 2.09 18.9 22.8
3 jump_one_leg 14.9 15.0 0.315 14.5 15.2