我想使用小提琴图来按地点(A和B)和世纪以下列格式显示考古文物的数量(年份在现在之前):
Year SiteA SiteB
22400 356 182
22500 234 124
22600 144 231
22700 12 0
...
24800 112 32
总共有6000件文物。在ggplot2中,对于小提琴情节来说,似乎首选数据输入格式是每个观察(人工制品)一行:
Site Year
A 22400
A 22400
... (356 times)
A 22400
B 22400
B 22400
... (182 times)
A 22500
A 22500
... (234 times)
A 22500
... ... ... (~5000 lines)
B 24800
B 24800
... (32 times)
B 24800
是否有一种将摘要数据框(第1个灰色框)转换为观察数据框(第2个灰色框)的有效方法,用于小提琴情节?
或者,有没有办法从第一个灰色框中格式化的数据制作小提琴图?
更新:
根据eipi10提供的答案,如果A站点或B站点的人工制品为零(如上面更新的22,700例子),我会收到以下错误:
Error in data.frame(Year = rep(dat$Year[i], dat$value[i]), Site = dat$key[i]) :
arguments imply differing number of rows: 0, 1
情节看起来像这样:
答案 0 :(得分:1)
这个怎么样:
library(tidyverse)
dat = read.table(text="Year SiteA SiteB
22400 356 182
22500 234 124
22600 144 231
24800 112 32", header=TRUE, stringsAsFactors=FALSE)
dat = gather(dat, key, value, -Year)
dat.long = data.frame(Year = rep(dat$Year, dat$value), Site=rep(dat$key, dat$value))
ggplot(dat.long, aes(Site, Year)) +
geom_violin()