我无法通过汇总获得所需的小数位数。这是一个简单的例子:
test2 <- data.frame(c("a","a","b","b"), c(245,246,247,248))
library(dplyr)
colnames(test2) <- c("V1","V2")
group_by(test2,V1) %>% summarise(mean(V2))
数据框是:
V1 V2
1 a 245
2 a 246
3 b 247
4 b 248
输出结果为:
V1 `mean(V2)`
<fctr> <dbl>
1 a 246
2 b 248
我希望它能给我包括小数位的方法(即245.5和247.5)
答案 0 :(得分:2)
由于使用的是dplyr
工具,因此结果输出实际上是一个小标题,默认情况下,该标题会打印带有3个有效数字的数字(请参阅选项pillar.sigfig
)。这与句点后的位数不同。要获取后者,只需将其转换为data.frame:as.data.frame
请注意,tibble的有效数字的概念有些复杂,它并不表示表示句点之后的多少位数,而是具有给定准确表示形式所需的最小位数的数量(我认为是99.9%,请参见discussion here)。
这意味着打印的位数取决于您的号码的“大小”:
library(tibble)
packageVersion("tibble")
#> [1] '2.1.3'
packageVersion("pillar")
#> [1] '1.4.2'
tab <- tibble(x = c(0.1234, 1.1234, 10.1234, 100.1234, 1000.1234))
options(pillar.sigfig=3)
tab
#> # A tibble: 5 x 1
#> x
#> <dbl>
#> 1 0.123
#> 2 1.12
#> 3 10.1
#> 4 100.
#> 5 1000.
options(pillar.sigfig=4)
tab
#> # A tibble: 5 x 1
#> x
#> <dbl>
#> 1 0.1234
#> 2 1.123
#> 3 10.12
#> 4 100.1
#> 5 1000.
as.data.frame(tab)
#> x
#> 1 0.1234
#> 2 1.1234
#> 3 10.1234
#> 4 100.1234
#> 5 1000.1234
由reprex package(v0.3.0)于2019-08-21创建
答案 1 :(得分:1)
这是一个解决方案 -
test2 <- data.frame(c("a", "a", "b", "b"), c(245, 246, 247, 248))
library(dplyr)
colnames(test2) <- c("V1", "V2")
group_by(test2, V1) %>%
dplyr::summarise(mean(V2)) %>%
dplyr::mutate_if(is.numeric, format, 1)
#> # A tibble: 2 x 2
#> V1 `mean(V2)`
#> <fct> <chr>
#> 1 a 245.5
#> 2 b 247.5
reprex package(v0.1.1.9000)于2018-01-20创建。
答案 2 :(得分:0)
我认为最简单的解决方案如下:
test2 <- data.frame(c("a","a","b","b"), c(245,246,247,248))
library(dplyr)
colnames(test2) <- c("V1","V2")
group_by(test2,V1) %>% summarise(`mean(V2)` = sprintf("%0.1f",mean(V2)))
# A tibble: 2 x 2
V1 `mean(V2)`
<fct> <chr>
1 a 245.5
2 b 247.5