Function R中的by函数的舍入输出
我正在尝试对Function R中的by函数的舍入输出,function,r,Function,R,我正在尝试对R中的简单by()函数的输出进行四舍五入。这就是我所拥有的: > by(glaciers[,1:3],glaciers$activity.level,mean) glaciers$activity.level: Active aspect sun.duration latitude -9.444444e+00 1.771778e+03 3.247643e+09 -----------------------------------------
R
中的简单by()
函数的输出进行四舍五入。这就是我所拥有的:
> by(glaciers[,1:3],glaciers$activity.level,mean)
glaciers$activity.level: Active
aspect sun.duration latitude
-9.444444e+00 1.771778e+03 3.247643e+09
-------------------------------------------
glaciers$activity.level: Inactive
aspect sun.duration latitude
1.041667e+01 2.067583e+03 4.048301e+09
-------------------------------------------
glaciers$activity.level: Relict
aspect sun.duration latitude
1.766667e+01 2.168000e+03 2.759283e+09
我怎样才能使我的输出四舍五入到小数点后5位,并且仍然保留因子
我试过:round(by(Glaces[,1:3],Glaces$activity.level,mean),5)
但得到一个错误:数学函数的非数值参数
by(glaciers[,1:3], glaciers$activity.level, function(x){round(mean(x),5)})
更新
以下是一个工作示例:
glaciers <- as.data.frame(matrix(rnorm(1000),ncol=4))
glaciers[,4] <- sample(0:3,250,replace=TRUE)
colnames(glaciers) <- c("A","B","C","activity.level")
by(glaciers[,1:3], glaciers$activity.level, function(x){round(mean(x),5)})
p>如果您已经将输出保存到变量中,例如x:
x <- by(glaciers[,1:3],glaciers$activity.level,mean)
因此,对最初发布的表达式的更正将是
x[] <- lapply(x,formatC,digits=5,format="f")
x[]要舍入还是只截断显示的位数?如果是后者,请使用选项(数字=3)或其他选项
> by(mpg[,8:9], mpg$cyl, mean)
mpg$cyl: 4
cty hwy
21.012 28.802
------------------------------------------------------------
mpg$cyl: 5
cty hwy
20.50 28.75
------------------------------------------------------------
mpg$cyl: 6
cty hwy
16.215 22.823
------------------------------------------------------------
mpg$cyl: 8
cty hwy
12.571 17.629
> options(digits=3)
> by(mpg[,8:9], mpg$cyl, mean)
mpg$cyl: 4
cty hwy
21.0 28.8
------------------------------------------------------------
mpg$cyl: 5
cty hwy
20.5 28.8
------------------------------------------------------------
mpg$cyl: 6
cty hwy
16.2 22.8
------------------------------------------------------------
mpg$cyl: 8
cty hwy
12.6 17.6
只有几分钟的时间,但您可以尝试查看format()
、formatC()
和prettyNum()
函数。他们的帮助文件现在在我看来像是胡言乱语,但我睡得不多。然而,我确实在几个月前的一份Swave报告中使用了其中一个函数,很可能是formatC()
,在该报告中,我需要非常特殊的格式化数字。round()
在这种情况下没有意义,因为您使用的是非常大的numebr。您需要使用format()命令,并选择要显示的位数。例如,要显示3个有效数字:
by(glaciers[,1:3], glaciers$activity.level, function(x) {
as.numeric(format(mean(x), digits=3))
})
您曾问过“我如何才能将我的输出四舍五入到小数点后5位?”但我认为您的意思是“我如何才能使我的输出显示六位有效数字?”下面的代码结合了前面的两个答案——重新分配到res[]的想法,以及使用signif而不是四舍五入
glaciers <- data.frame(aspect=runif(20)*100,
sun.duration=runif(20)*10000,
latitude=runif(20)*10^9,
activity.level=sample(c('Active','Inactive','Relict'),20,replace=TRUE))
res <- by(glaciers[,1:3],glaciers$activity.level,mean)
res[] <- lapply(res,signif,3)
res
补充一点:by()函数的输出是一个“by”对象,因此不能对其执行round()之类的操作。Stephen,我尝试了这种方法,但仍然得到了非整数的指数输出,如上所述。有什么想法吗?Rob,我也尝试过这个方法,但仍然得到了指数为非整数的数字,如上所述。我不知道为什么要使用round()函数。我对它进行了更多的研究,发现如果我按.5进行取整,那么它实际上会取整,但只会取整到小数点后1位。我想四舍五入说小数点后3-5位,但用整数似乎不行。我不知道你在做什么。我更新了我的答案,加入了一个有效的例子。罗伯,如果你看我上面的结果,我的结果是科学符号。round命令似乎对S.N.不起作用,因为数字太长了。我四处寻找帮助,找到了那个签名。这将以您喜欢的精度进行取整,但仍采用科学记数法。我最终在by命令中使用了你的函数位置,但使用了.5而不是5,这使我得到了小数点后1位的实数。通过(Glaces[,1:3],Glaces$activity.level,function(x){round(mean(x),.5)})来澄清:您需要将其放入by()函数中,就像Rob和Stephen对round()所做的那样。
by(glaciers[,1:3], glaciers$activity.level, function(x) {
as.numeric(format(mean(x), digits=3))
})
glaciers <- data.frame(aspect=runif(20)*100,
sun.duration=runif(20)*10000,
latitude=runif(20)*10^9,
activity.level=sample(c('Active','Inactive','Relict'),20,replace=TRUE))
res <- by(glaciers[,1:3],glaciers$activity.level,mean)
res[] <- lapply(res,signif,3)
res
glaciers$activity.level: Active
aspect sun.duration latitude
3.66e+01 4.72e+03 4.56e+08
-------------------------------------------------
glaciers$activity.level: Inactive
aspect sun.duration latitude
5.81e+01 5.28e+03 4.83e+08
-------------------------------------------------
glaciers$activity.level: Relict
aspect sun.duration latitude
6.08e+01 4.75e+03 3.98e+08