我有一个包含纵向数据的数据框,如下所示
test
Names hr1 hr2 hr3 hr4 workhr_bin
41 80 76 70 60 7
42 80 74 75 NA 8
43 85 NA 60 65 6
44 NA NA NA 60 3
45 80 70 NA NA 8
46 NA NA NA 60 3
hr1
、hr2
、hr3
、hr4
的变量包括按重复时间间隔报告的服务时间“名称”栏下的主题。 “workhr_bin”列包括使用分位数函数获得的 bin。总共有 10 个垃圾箱,比例为 1:10。
我正在尝试生成多个由垃圾箱组成的小时意大利面图。本质上它应该产生 10 个图,一个图用于 bin 1 中的数据,另一个图用于数据箱 2 等。
我尝试这样做:
head(melt(test[,c(2:6)]))
但是我最终得到了 workhr_bin
变量,取而代之的是一个像这样的文件:
variable value
1 hours1 80
2 hours1 80
3 hours1 85
4 hours1 NA
5 hours1 80
6 hours1 NA
我也尝试过
melt(test, id.var = "Names")
最终我的 workhr_bin
变量也消失了
Names variable value
41 hr1 80.00
42 hr1 80.00
43 hr1 85.00
我尝试使用lattice
和ggplot2
,但由于某种原因,我无法将数据转换为正确的格式来生成代表每个箱内样本的意大利面条10图。
本质上我需要一个数据框:
Names variable value workhr_bin
41 hr1 80.00 7
42 hr1 80.00 8
43 hr1 85.00 6
然后我希望能够创建一个在 x.axis 上带有“变量”的 bin-faceted 多色意大利面图(由 hr1
、hr2
、hr3
, hr4
) 以及 y 轴上相应的“值”。
最佳答案
您应该研究reshape2::melt
的文档。
DF <- read.table(text=" Names hr1 hr2 hr3 hr4 workhr_bin
41 80 76 70 60 7
42 80 74 75 NA 8
43 85 NA 60 65 6
44 NA NA NA 60 3
45 80 70 NA NA 8
46 NA NA NA 60 3", header=TRUE)
library(reshape2)
DF_melt <- melt(DF, id.vars=c("Names", "workhr_bin"))
#make time numeric
DF_melt$variable <- as.numeric(gsub("hr", "", DF_melt$variable))
library(ggplot2)
p <- ggplot(DF_melt, aes(x=variable, y=value, color=factor(Names))) +
geom_line() +
geom_point() +
facet_grid(workhr_bin ~ .)
print(p)
(这会导致 ggplot2 发出警告,因为没有足够的数据。我假设您的真实数据集不会出现此问题。)
关于r - 具有时间点的分箱纵向数据的意大利面条图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20393448/