R语言 规范化时间戳数据

1aaf6o9v  于 2023-04-09  发布在  其他
关注(0)|答案(1)|浏览(168)

我有一个大的数据集,它是在数字数据类型的形式,定义时间在24小时格式在HHMM形式。
由于数据类型为数值型,因此前面的零不存在。可以在此处找到数据示例:

> dput(sleepDiary_1[1:100,3:4])

structure(list(`What time did you get into bed? (hhmm) (e.g., 11pm = 2300, 1.35am = 0135)
*please make sure its 4 digits (2 for hours, 2 for minutes)` = c(2330, 
100, 9, 110, 10, 0, 209, 330, 2330, 50, 330, 800, 30, 100, 0, 
2345, 130, 135, 400, 330, 100, 400, 100, 100, 315, 2305, 250, 
215, 2300, 3, 356, 2306, 500, 0, 200, 10, 230, 2230, 100, 2200, 
1230, 1128, 100, 430, 200, 5, 300, 145, 1, 100, 2330, 300, 2314, 
1130, 0, 30, 1230, 15, 2300, 300, 200, 315, 2300, 105, 2310, 
300, 1248, 30, 30, 2315, 2300, 35, 2300, 211, 1330, 115, 45, 
130, 1200, 200, 300, 1220, 200, 230, 100, 300, 300, 145, 1100, 
544, 300, 300, 2238, 0, 100, 133, 30, 5, 205, 300), `What time did you try and go to sleep? (hhmm) (e.g., 11pm = 2300, 1.35am = 0135)` = c(2330, 
115, 34, 130, 20, 0, 257, 330, 15, 110, 430, 800, 40, 130, 0, 
2345, 200, 150, 445, 330, 105, 400, 100, 100, 315, 2305, 330, 
220, 100, 3, 430, 2306, 500, 5, 200, 0, 400, 2240, 130, 2200, 
1230, 200, 130, 430, 215, 15, 320, 200, 30, 130, 2330, 300, 2314, 
1132, 15, 30, 1230, 40, 2345, 300, 200, 315, 200, 110, 2310, 
300, 1248, 125, 30, 2310, 0, 20, 0, 211, 1345, 45, 0, 155, 100, 
330, 400, 1230, 200, 300, 115, 300, 300, 200, 1152, 530, 330, 
300, 2230, 45, 130, 130, 25, 20, 230, 320)), row.names = c(NA, 
-100L), class = c("tbl_df", "tbl", "data.frame"))

我希望对列进行归一化,以便进行进一步的分析。结果我不确定哪种归一化方法效果最好。我试图查看非正态数据的各种可能选项,但没有一个选项提到循环数据在一定时间后循环,即在2400之后,时间变回0000,因此值不会继续增加,而是循环。
为了补充,数据是关于睡眠时间和唤醒时间从不同的参与者记录在一项研究中。原来我们希望规范化的数据,并删除任何可能存在的离群值。
干杯!

flseospp

flseospp1#

我想这会让你更接近你想要的。

library(ggplot2)
names(df) <- c("bed_try", "sleep_try")
ggplot(df, aes(bed_try, sleep_try)) + geom_point()

要将hhmm转换为小时,在小数点后,我们有小数小时:

convert_hhmm <- function(hhmm) {
  floor(hhmm / 100) +
    (hhmm - floor(hhmm / 100) * 100) / 60
}

选择一个任意的睡眠周期开始时间-2000看起来不错在“pivot time”之后将所有时间更改为hhmm因为我们需要pivot time之后的小时数,我们可以从times〉that中减去它,然后将2400 - pivot time添加到其余时间

pivot_time <- 2000

将bed_try转换为新列bed_plus

df$bed_plus <- df$bed_try - pivot_time
df$bed_plus[df$bed_plus < 0] <- df$bed_plus[df$bed_plus < 0] + 
                                 pivot_time + # back to bed_try
                                 (2400 - pivot_time)
df$bed_plus <- convert_hhmm(df$bed_plus)

将sleep_try转换为新列sleep_plus

df$sleep_plus <- df$sleep_try - pivot_time
df$sleep_plus[df$sleep_plus < 0] <- df$sleep_plus[df$sleep_plus < 0] + 
  pivot_time +
  (2400 - pivot_time)
df$sleep_plus <- convert_hhmm(df$sleep_plus)

探索性地块

ggplot(df, aes(bed_plus, sleep_plus)) + geom_jitter()

ggplot(df, aes(sleep_plus - bed_plus)) + geom_histogram()

删除负面信息-或者,找出如何纠正它们。

df <- df[-which((df$sleep_plus - df$bed_plus) < 0), ]

结果看起来更像你想要的?

ggplot(df, aes(bed_plus, sleep_plus)) + geom_jitter()
ggplot(df, aes(sleep_plus - bed_plus)) + geom_histogram()

相关问题