如何融化你的数据
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
对于你们大多数人来说,这是一个简单的问题,所以很抱歉提出这个问题。
我想融化我的数据。
我的数据结构
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