R 如何获取数值数据的平均值,并将平均值包含到绘图中
我是一个新手R用户&已经在网站上查看了相关问题。虽然我的问题的标题在我遇到一些我无法解决的其他问题之前已经被问过了 我能够成功地使用R控制台制作一个箱线图,其中包含我通过.csv导入的数据,其中包括一些NA值(使用R 如何获取数值数据的平均值,并将平均值包含到绘图中,r,plot,warnings,R,Plot,Warnings,我是一个新手R用户&已经在网站上查看了相关问题。虽然我的问题的标题在我遇到一些我无法解决的其他问题之前已经被问过了 我能够成功地使用R控制台制作一个箱线图,其中包含我通过.csv导入的数据,其中包括一些NA值(使用boxplot(Test)),其中Test是我的数据的名称,包含3列数据,每列带有20个数据点的标签 但当我试图计算平均值(使用:mean(Test)或尝试将其添加到成功制作的箱线图(使用:abline(v=mean(Test))时,它给了我以下警告信息: Warning messag
boxplot(Test)
),其中Test是我的数据的名称,包含3列数据,每列带有20个数据点的标签
但当我试图计算平均值(使用:mean(Test)
或尝试将其添加到成功制作的箱线图(使用:abline(v=mean(Test)
)时,它给了我以下警告信息:
Warning message:
In mean.default(Test) : argument is not numeric or logical: returning NA
Warning message:
In mean.default(X[[i]], ...) :
argument is not numeric or logical: returning NA
现在,当我尝试:sapply(Test,mean,na.rm=TRUE)
时,我确实得到了正确的结果,但随后出现了警告消息:
Warning message:
In mean.default(Test) : argument is not numeric or logical: returning NA
Warning message:
In mean.default(X[[i]], ...) :
argument is not numeric or logical: returning NA
当使用:Summary(Test)
时,所有正确的计算结果都会出来,没有任何警告消息。我不清楚问题是什么?请提供任何建议!谢谢
更新2:
谢谢你下面的回答,效果很好
更新1:
感谢下面的帮助者-使用colMeans(Test,na.rm=TRUE)
返回我所有列的平均值。但是是否可以将每个数据列的平均值作为点添加到所有数据(即所有三列)的箱线图中?使用abline(v=colMeans(Test))
仅在整个绘图中添加一行
其他信息:
当我使用:class(Test)
时,它返回:
[1] "data.frame"
此外,我还使用sapply(Test,mode)
检查了我的数据类型(如果我使用了任何不正确的词,我表示歉意),它会为我的数据的所有3列返回“numeric”
仅部分数据集
a b c
0.68 0.68 0.68
0.28 0.28 0.28
0.62 0.62 0.62
0.73 0.73 0.73
下面是一个如何用三个数值变量创建箱线图的示例,并使用每个变量的平均值添加点
#Create example data, including some NA values
set.seed(13121)
test = data.frame(a = c(rnorm(99, 1, 1), NA),
b = c(NA, rnorm(99, 0, 1)),
c = rnorm(100, 2, 2))
#Calculate means for each of the columns
means = colMeans(test)
本例中的结果返回前两列的NA
,因为其中有NA
值:
means
# a b c
# NA NA 2.021736
解决方案是添加na.rm=TRUE
选项(有关更多信息,请参阅?colMeans
):
现在,我们已经准备好进行箱线图,并添加具有计算平均值的点:
boxplot(test)
points(means, col = "red")
结果:
对于
平均值
,您需要指定列,即平均值(测试[,1])
以获取第一列的平均值。如果有多个列,colMeans(测试)
给出每列的平均值。你能举个例子吗?你可能有一个因子
。它们是类别的数字
表示,但你不能对它们进行数学运算。例如因子(c(“男性”、“女性”)
的平均值是多少?没有意义。试试简单(测试,课堂)
这是因为您没有将所有列都设置为数字。某些列可能是因子或字符类。dput(head(Test,1))
显示了什么?这将一劳永逸地解决这个问题。包含20个数据点的三列是一个小集合。为什么不复制dput(Test)的整个输出
在你的帖子中?谢谢,这很管用!但是当我用更长的名字(即14个字符长)重新做这件事并添加了几个变量时,绘图要么只显示其他名字(如果是水平的),要么显示一些字母的切面(如果是垂直的,使用las=2')。轴标题也与标签重叠。虽然
cex.axis`减少了字体,但对我来说太小了。是否有办法将整个轴名称保持在正常大小(`cex.axis=1)并且不会丢失14个字符名称中的一些字母?再次感谢。@Ameno:对于标签被剪切的问题,在进行箱线图之前,您可以使用par
调整绘图页边距的大小。例如:par(mar=c(10,4,4,2))
。尝试不同的数字,看看什么最适合您,更多信息请参见?par
。对于轴标题,不要在箱线图函数中使用xlab
,而是在绘制箱线图后使用mtext
。例如:mtext(text=“x title”,side=1,padj=14)
。再次使用padj
参数。有关更多信息,请参阅。谢谢@hugo,所有这些都很有帮助,我正在尝试不同的方法来看看效果如何。您的输入非常有用,因此我想问一下是否有方法控制箱线图轴上的小数或sig图的数量?我还无法实现这一点。