如何融化你的数据

How to melt your data

对于你们大多数人来说,这是一个简单的问题,所以很抱歉提出这个问题。

我想融化我的数据。

我的数据结构

structure(list(PersonalCare = c(2, 2, 2, 2, 2, 2), Sleep = c(28, 
60, 54, 58, 80, 78)), row.names = c("04:00", "04:10", "04:20", 
"04:30", "04:40", "04:50"), class = "data.frame"

数据格式如下

        Personalcare    Sleep
04:00   2   28
04:10   2   60
04:20   2   54
04:30   2   58
04:40   2   80
04:50   2   78
05:00   2   110
05:10   2   156
05:20   1   172
05:30   1   192
05:40   1   214

在我使用 melted_PersonalcareSleep<- melt(PersonalcareSleep) 融化我的数据后,我的数据格式变为

1   04:00   Personalcare    2
2   04:10   Personalcare    2
3   04:20   Personalcare    2
4   04:30   Personalcare    2
5   04:40   Personalcare    2
6   04:50   Personalcare    2
7   05:00   Personalcare    2
8   05:10   Personalcare    2
9   05:20   Personalcare    1
10  05:30   Personalcare    1
11  05:40   Personalcare    1

...

145 04:00   Sleep   28
146 04:10   Sleep   60
147 04:20   Sleep   54
148 04:30   Sleep   58
149 04:40   Sleep   80
150 04:50   Sleep   78
....

在我绘制数据后:

ggplot(melted_PersonalcareSleep, aes(x = Var1,y = value,group=Var2, color=Var2)) + geom_line(size=1) +labs(x="Time", y="Frequences", colour="Activties", fill="Activites" ) + theme(legend.position="right", axis.text.x = element_text(angle = 0, hjust = 0))  +annotate("rect", fill = "black", alpha = 0.3, xmin = c(97), xmax = c(121), ymin = -Inf, ymax = Inf)

Output

正如您在图片上看到的那样 activity 未正确显示

如何根据时间融化我的数据(我不希望时间重复)。

非常感谢

我们可以从 row.names 创建一个列,然后使用 gather

library(tidyverse)
rownames_to_column(df1, 'time') %>%
       gather(key, val, -time)

你也可以使用-

> data.table::setDT(df1,keep.rownames = "time")
> melt(df1,id.vars = "time")


    time     variable     value
 1: 04:00 PersonalCare     2
 2: 04:10 PersonalCare     2
 3: 04:20 PersonalCare     2
 4: 04:30 PersonalCare     2
 5: 04:40 PersonalCare     2
 6: 04:50 PersonalCare     2
 7: 04:00       Eating    28
 8: 04:10       Eating    60
 9: 04:20       Eating    54
10: 04:30       Eating    58
11: 04:40       Eating    80
12: 04:50       Eating    78