Как отформатировать чч: мм: сс формат, который доступен как char в датафрейме в целое число (для t-теста Стьюдента)? - PullRequest
0 голосов
/ 06 апреля 2019

Я новичок в R, мне импортировали фрейм данных, где один из столбцов (MileminDur) имеет длительность, позволяющую студенту преодолеть милю в формате чч: мм: сс. другой столбец содержит категориальные данные, если студент является спортсменом или нет. Я хочу сделать студенческий тест для этого. У меня есть 2 вопроса: - 1. столбец времени в формате чч: мм: сс имеет структуру "char" и, следовательно, я думаю, его нельзя использовать для каких-либо расчетов, необходимых для t-теста Стьюдента. Как сделать это преобразование? Будет ли преобразование в числовом формате? 2. Я пропустил значения в обоих столбцах, и поскольку значения отсутствуют без упоминания "NA" - сможет ли наша функция na.omit () дать мне чистый вывод без пропущенных значений?

Попробовал некоторый код, чтобы, по крайней мере, я мог получить пропущенные значения, но из первого оператора все строки заполняются значением "NA" и, следовательно, неверным результатом.

У меня нет решения для решения проблемы hh: ss: ss, чтобы попробовать

s_data_ttest1$MileMinDur <- as.character(as.numeric(s_data_ttest1$MileMinDur)) 

ttest1<-na.omit(s_data_ttest1)

ожидание - это удаление пропущенных значений + как работать с форматом чч: мм: сс до некоего целочисленного формата, который можно использовать в статистическом анализе

Ответы [ 2 ]

2 голосов
/ 06 апреля 2019

Поведение по умолчанию с t.test в R - использовать полные случаи, следовательно, игнорируя все строки с хотя бы одним пропущенным значением.

Вот воспроизводимый пример.Рассмотрим следующие данные:

set.seed(1)
dat <- data.frame(MileminDur=c("22:11:50","23:11:50", NA, "23:11:51", rep("23:15:00", 11)),
                  athelete=sample(c(TRUE, FALSE, NA), 15, replace=TRUE))
print(dat)

MileminDur  Athelete
22:11:50    TRUE            
23:11:50    FALSE           
NA          FALSE           
23:11:51    NA          
23:15:00    TRUE            
23:15:00    NA          
23:15:00    NA          
23:15:00    FALSE           
23:15:00    FALSE           
23:15:00    TRUE    

Ваш набор данных состоит из 15 строк, и у вас есть 9 "полных дел".Завершенные случаи в статистическом смысле означают любое наблюдение (строки), где все поля / переменные имеют значение, которое не равно NA.

Ваша первая задача - преобразовать переменную MileminDur в числовое значение.Это можно сделать с помощью следующего кода:

now <- as.POSIXct(format(Sys.Date()))
dat$MileminDur <- as.numeric(strptime(dat$MileminDur, format = "%H:%M:%S") - now, 
                             units="secs")
head(dat,5)

MileminDur athelete
79910       TRUE            
83510       FALSE           
NA          FALSE           
83511       NA          
83700       TRUE    

Теперь вы можете выполнить t.test:

t.test(dat$MileminDur ~ dat$athelete)

, который возвращает:

    Welch Two Sample t-test

data:  dat$MileminDur by dat$athelete
t = 0.9355, df = 4.0314, p-value = 0.4021
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
 -1391.713  2812.713
sample estimates:
mean in group FALSE  mean in group TRUE 
            83652.5             82942.0 

ПосколькуПоведение по умолчанию с t.test - игнорирование строк с пропущенными значениями, по сути это то же самое, что удаление строк с помощью NA s вручную:

# remove any row where there's one or more NA values
dat <- dat[complete.cases(dat), ]
t.test(dat$MileminDur ~ dat$athelete)

Тот же вывод:

Welch Two Sample t-test

data:  dat$MileminDur by dat$athelete
t = 0.9355, df = 4.0314, p-value = 0.4021
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
 -1391.713  2812.713
sample estimates:
mean in group FALSE  mean in group TRUE 
            83652.5             82942.0 
0 голосов
/ 06 апреля 2019

Вы можете взглянуть на пакет readr.Он преобразует ввод текста в формате чч: мм: сс в переменную, которая представляет общее количество секунд при загрузке данных.

Вы можете использовать соответствующий пакет dplyr, чтобы легко отфильтровывать времена NA.

Если вы можете сохранить свои входные данные в виде файла CSV, то вы можете импортировать свои данные и отфильтровать NA.используя следующий код:

library(readr)
library(dplyr)

df <- read_csv("yourCsvFileName.csv") %>%
  filter(!is.na(timeVariable))

Надеюсь, что поможет.

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