首先讓我們將您的數據保存爲data.frame
,其中包含兩列label
和size
。
mydata <- read.table(textConnection('
label\tsize
x\t2 3 4 5
y\t2 6 8
z\t1 6 8
a\t2 2
b\t4 7 9 10 11
c\t8 12
'),header=TRUE,sep="\t")
顯示它在R,
> mydata
label size
1 x 2 3 4 5
2 y 2 6 8
3 z 1 6 8
4 a 2 2
5 b 4 7 9 10 11
6 c 8 12
然後是棘手的部分。我們將size
的每個單獨值保存在一個矩陣中,並用NA
填充較短的行。這受到this post的啓發。
mylist <- strsplit(as.character(mydata[,"size"])," ")
n <- max(sapply(mylist, length))
mymatrix <- apply(do.call(rbind, lapply(mylist, `[`, seq_len(n))),1,as.numeric)
矩陣的樣子,
> mymatrix
[,1] [,2] [,3] [,4] [,5] [,6]
[1,] 2 2 1 2 4 8
[2,] 3 6 6 2 7 12
[3,] 4 8 8 NA 9 NA
[4,] 5 NA NA NA 10 NA
[5,] NA NA NA NA 11 NA
最後,我們準備做的情節!
barplot(
mymatrix, beside=TRUE,
col=1:n,
names.arg=mydata$label)
請分享你的數據在一個可重複的格式,比如'dput(droplevels(頭(MYDATA)))'。 – Gregor
dput的輸出是:結構(列表(標籤=結構(c(4L,5L,6L,1L,2L,3L),。標籤= c(「a」, 「b」,「c」,「x (「1」,「1」,「1」,「1」,「 2 2「,」2 3 4 5「, 」2 6 8「,」4 7 9 10 11「,」8 12「),class =」factor「)),.Name = c(」Label「, 「size」),row.names = c(NA,6L),class =「data.frame」) –