3

我需要从具有三个数字列的data.frame创建一个箱线图,并使用参数split将框分隔开。我有一个很大的data.frame,但我需要的是下面的示例:

paint<-c("blue", "black", "red", "blue", "black", "red", "blue", "black", "red")
car1<-c(100, 138, 123, 143, 112, 144, 343, 112, 334)
car2<-c(111, 238, 323, 541, 328, 363, 411, 238, 313)
car3<-c(432, 123, 322, 342, 323, 522, 334, 311, 452)
data<-data.frame(paint, car1, car2, car3)

>data
      paint  car1 car2 car3
   1  blue   100  111  432
   2  black  138  238  123
   3  red    123  323  322
   4  blue   143  541  342
   5  black  112  328  323
   6  red    144  363  522
   7  blue   343  411  334
   8  black  112  238  311
   9  red    334  313  452

当我只使用一列时,以下功能有效:

箱线图(拆分(数据[,2],数据[,1]))

但是当我尝试使用三列创建箱线图时,该功能不起作用:

箱线图(拆分(数据[,2:4],数据[,1]))

感谢您的帮助,并为英语不好感到抱歉。

4

1 回答 1

7

尝试先将您的数据放入长格式,然后绘制:

temp = reshape(data, direction="long", varying=2:4, sep="")
boxplot(split(temp[,3], temp[,1]))
# boxplot(car ~ paint, data=temp) ### Formula notation, easier to read

在此处输入图像描述

或者,使用lattice

library(lattice)
bwplot(car1 + car2 + car3 ~ paint, data=data)

boxplot我不确定为什么该符号不适用于base R。

在此处输入图像描述

更新

如果我误解了您的原始问题(在阅读了 Roman 的评论之后),这里有一个选项(再次使用lattice),它将箱线图分别放在car1,car2car3并排放置。temp这使用在第一个示例中创建的长格式数据:

bwplot(car ~ paint | paste0("Car ", time), data = temp)

在此处输入图像描述

于 2012-07-15T20:48:37.927 回答