我是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格式转换为某种整数类型的格式,以便可以在统计分析中使用
答案 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))
希望有帮助。