8

我有一个 2 列的矩阵。我想要这些列中的每一列,但每列都有不同数量的条目。

例如,第一列有 10 个条目,第二列有 7 个条目。第二列的剩余 3 为零。

出于比较的原因,我想将这些并排绘制。

有没有办法告诉 R 对整个第 1 列进行箱线图,而第 2 列只有前 7 个条目?

4

2 回答 2

12

您可以简单地索引您想要的值,例如

## dummy version of your data
mat <- matrix(c(1:17, rep(0, 3)), ncol = 2)

## create object suitable for plotting with boxplot
## I.e. convert to melted or long format
df <- data.frame(values = mat[1:17],
                 vars = rep(c("Col1","Col2"), times = c(10,7)))

## draw the boxplot
boxplot(values ~ vars, data = df)

在上面我相信你的话,你有一个矩阵。如果您实际上有一个数据框,那么您将需要

df <- data.frame(values = c(mat[,1], mat[1:7, 2]),
                 vars = rep(c("Col1","Col2"), times = c(10,7)))

我假设两列中的数据具有可比性,因为值在两列中的事实表明分类变量允许我们拆分值(如男性和女性的身高,以性别作为分类值)。

生成的箱线图如下所示

在此处输入图像描述

于 2013-07-19T15:03:46.180 回答
3

对于任意数量的列和任意数量的空条目,您可以这样做。

## Load data from CSV; first row contains column headers
dat <- read.csv( 'your-filename.csv', header = T )

## Set plot region (when set 'ylim' skip first row with headers)
plot(
  1, 1, 
  xlim=c(1,ncol(dat)), ylim=range(dat[-1,], na.rm=T), 
  xaxt='n', xlab='', ylab=''
)
axis(1, labels=colnames(dat), at=1:ncol(dat))

for(i in 1:ncol(dat)) {
  ## Get i-th column
  p <- dat[,i]

  ## Remove 0 values from column
  p <- p[! p %in% 0]
  ## Instead of 0 you can use any values
  ## For example, you can remove 1, 2, 3
  ##   p <- p[! p %in% c(1,2,3)]

  ## Draw boxplot
  boxplot(p, add=T, at=i)
}

此代码加载表格形式的 CSV 文件,从列中删除 0 值(或者您可以删除任何其他值),并在一个图形中为每一列绘制所有箱线图。

认为这有帮助。

于 2014-01-23T00:38:25.983 回答