mja*_*ews 8 r tidyverse tibble
我有一个weight.csv包含以下内容的 csv 文件。
weight,weight_selfreport
81.5,81.66969147005445
72.6,72.59528130671505
92.9,93.01270417422867
79.4,79.4010889292196
94.6,96.64246823956442
80.2,79.4010889292196
116.2,113.43012704174228
95.4,95.73502722323049
99.5,99.8185117967332
Run Code Online (Sandbox Code Playgroud)
如果我做
library(readr)
Df <- read_csv('weight.csv')
Df
Run Code Online (Sandbox Code Playgroud)
我得到
# A tibble: 9 x 2
weight weight_selfreport
<dbl> <dbl>
1 81.5 81.7
2 72.6 72.6
3 92.9 93.0
4 79.4 79.4
5 94.6 96.6
6 80.2 79.4
7 116. 113.
8 95.4 95.7
9 99.5 99.8
Run Code Online (Sandbox Code Playgroud)
如果我将该小标题转换为普通数据框,我会看到更多数字。
as.data.frame(Df)
weight weight_selfreport
1 81.5 81.66969
2 72.6 72.59528
3 92.9 93.01270
4 79.4 79.40109
5 94.6 96.64247
6 80.2 79.40109
7 116.2 113.43013
8 95.4 95.73503
9 99.5 99.81851
Run Code Online (Sandbox Code Playgroud)
最初我想,如果我想为 tibble 获得这种类型的显示,我想我会这样做options(pillar.sigfig = 5)。
然而,这不是它的作用。
options(pillar.sigfig = 5)
Df
# A tibble: 9 x 2
weight weight_selfreport
<dbl> <dbl>
1 81.5 81.670
2 72.600 72.595
3 92.9 93.013
4 79.4 79.401
5 94.6 96.642
6 80.2 79.401
7 116.2 113.43
8 95.4 95.735
9 99.5 99.819
Run Code Online (Sandbox Code Playgroud)
所以我认为这pillar.sigfig是关于控制有效数字而不是小数位。
很好但是
这可能有点晚了……晚了三年,但它可能会帮助其他人寻找答案。
\n问题出在tibble. 它以一种非常固执己见的方式来代表 dfs。我认为,您通常不觉得有必要以这种方式查看数据,但如果您这样做,我经常使用的两个选项可能只是另一种解决方法。
选项 1:使用num()
这个简洁的函数强制使用小数。因此,您可以mutate()使用以下内容设置要格式化的所有列:
library(tidyverse)\n\ndata <- tribble(\n~ weight, ~ weight_selfreport,\n81.5,81.66969147005445,\n72.6,72.59528130671505,\n92.9,93.01270417422867,\n79.4,79.4010889292196,\n94.6,96.64246823956442,\n80.2,79.4010889292196,\n116.2,113.43012704174228,\n95.4,95.73502722323049,\n99.5,99.8185117967332\n)\n\ndata <-\n data %>%\n mutate(across(where(is.numeric), ~ num(., digits = 3)))\n\ndata\n#> # A tibble: 9 \xc3\x97 2\n#> weight weight_selfreport\n#> <num:.3!> <num:.3!>\n#> 1 81.500 81.670\n#> 2 72.600 72.595\n#> 3 92.900 93.013\n#> 4 79.400 79.401\n#> 5 94.600 96.642\n#> 6 80.200 79.401\n#> 7 116.200 113.430\n#> 8 95.400 95.735\n#> 9 99.500 99.819\nRun Code Online (Sandbox Code Playgroud)\n选项 2:使用表包
\n通常,当我检查一个时tibble,是因为它包含我想要报告的结果。因此,我使用许多表生成器包之一,例如
flextable,gt,formattable,reactable,这是您可以尝试使用的示例flextable:
library(tidyverse)\n\ndata <- tribble(\n \n~ weight, ~ weight_selfreport,\n81.5,81.66969147005445,\n72.6,72.59528130671505,\n92.9,93.01270417422867,\n79.4,79.4010889292196,\n94.6,96.64246823956442,\n80.2,79.4010889292196,\n116.2,113.43012704174228,\n95.4,95.73502722323049,\n99.5,99.8185117967332\n)\n\nflextable::flextable(data)\nRun Code Online (Sandbox Code Playgroud)\n我认为选项 1可能就是您正在寻找的。
\n小智 1
我有同样的问题。使用pillar.sigfig 会有所帮助。您还可以将它与 round() 一起使用,并且您有更多的控制权。但如果最后一个数字为0,则不会显示。
我使用的“技巧”是将结果保存在变量中,然后使用 print.data.frame()。然后就可以正常工作了。但也许有一个更简单的解决方案......