如何将hh:mm:ss格式格式化为数据框中的char格式为整数(用于学生t检验)?

时间:2019-04-06 10:50:03

标签: r

我是R的新手,已经导入了一个数据框,其中的一列(MileminDur)具有让学生以hh:mm:ss格式覆盖英里的持续时间。如果学生是否为运动员,则另一列包含类别数据。我想为此做学生t测试。我有2个问题: 1. hh:mm:ss中的时间列采用“ 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)

期望是删除缺失值+如何将hh:mm:ss格式转换为某种整数类型的格式,以便可以在统计分析中使用

2 个答案:

答案 0 :(得分:2)

R中t.test的默认行为是使用完整的大小写,因此无论如何都会忽略具有至少一个缺失值的任何行。

这是一个可复制的示例。考虑以下数据:

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的行是相同的:

# 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 

答案 1 :(得分:0)

您可能会看一下阅读器包。它将把hh:mm:ss文本输入转换为一个变量,该变量表示加载数据时的总秒数。

您可以使用相关的dplyr软件包轻松过滤出NA时间。

如果您可以将输入数据另存为csv文件,则可以使用以下代码导入数据并过滤出NA:

library(readr)
library(dplyr)

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

希望有帮助。