0

我有个问题。我想用平均值和误差线制作一个条形图,其中它被分组为两个因素。为了获得平均值和标准误差,我使用了函数 tapply。

但是,对于其中一个因素,我想降低一个级别。

所以我所做的是:

dataFE <- data[-which(plant=="FS"),] # this works fine, I get exactly the data set I want without the FS level of the factor plant 

然后为了得到平均误差和标准误差,我使用这个:

means <- with(dataFE, as.matrix(tapply(leaves, list(plant, Orchestia), mean), nrow=2)

e <- with(dataFE, as.matrix(tapply (leaves, list(plant, Orchestia), function(x) sd(x)/sqrt(length(x))), nrow=2))

并且发生了一些奇怪的事情,它不计算 FS,但是它把它放在一个带有 NA 的表中:

    row.names   no          yes
1   F           7.009022    5.307185

2   FS          NA          NA

3   S           2.837139    2.111054

这是我不想要的,因为如果我在 barplot2(包 gplots)中使用它,那么我会得到一个 FS 的空栏,而那个根本不应该在那里。

任何使用都有解决方案或其他方法来获得漂亮的条形图:)。不管怎么说,还是要谢谢你!

4

1 回答 1

2

如果没有您的数据样本,我只是猜测一下:

您的色谱柱设备是一个因素。虽然您已经删除了具有该值的行,但“级别”FS仍然存在。用levels(data$plant)来看。然后你可以用droplevels它来摆脱它。

dat <- data.frame(x=1:15, y=factor(letters[1:3]))

> levels(dat$y)
[1] "a" "b" "c"

dat <- dat[dat$y != 'a',]
> levels(dat$y)
[1] "a" "b" "c"
> 

> tapply(dat$x, dat$y, sum)
 a  b  c 
NA 40 45 
> 

> droplevels(dat$y)
 [1] b c b c b c b c b c
Levels: b c
> dat$y <- droplevels(dat$y)

> tapply(dat$x, dat$y, sum)
 b  c 
40 45 
> 
于 2012-07-24T14:49:06.357 回答