相关疑难解决方法(0)

控制R中打印输出的小数位数

R中有一个选项可以控制数字显示.例如:

options(digits=10)
Run Code Online (Sandbox Code Playgroud)

应该给计算结果10位数,直到R会话结束.在R的帮助文件中,digits参数的定义如下:

digits:控制打印数值时要打印的位数.这只是一个建议.有效值为1 ... 22,默认值为7

所以,它说这只是一个建议.如果我想总是显示10位数而不是更多或更少,该怎么办?

我的第二个问题是,如果我想显示超过22位数,即更精​​确的计算如100位数,该怎么办?是否可以使用基础R,或者我是否需要额外的包/功能?

编辑:感谢jmoy的建议,我尝试了sprintf("%.100f",pi)它给了

[1] "3.1415926535897931159979634685441851615905761718750000000000000000000000000000000000000000000000000000"
Run Code Online (Sandbox Code Playgroud)

它有48位小数.这是R可以处理的最大限制吗?

precision r digits output-formatting r-faq

103
推荐指数
2
解决办法
21万
查看次数

R中的格式编号,包含逗号千位分隔符和指定小数

我想用千位分隔符格式化数字并指定小数位数.我知道如何分开做这些,但不能一起做.

比如,我用format为小数:

FormatDecimal <- function(x, k) {
  return(format(round(as.numeric(x), k), nsmall=k))
}
FormatDecimal(1000.64, 1)  # 1000.6
Run Code Online (Sandbox Code Playgroud)

对于千位分隔符,formatC:

formatC(1000.64, big.mark=",")  # 1,001
Run Code Online (Sandbox Code Playgroud)

但这些并不能很好地融合在一起:

formatC(FormatDecimal(1000.64, 1), big.mark=",")  
# 1000.6, since no longer numeric
formatC(round(as.numeric(1000.64), 1), nsmall=1, big.mark=",")
# Error: unused argument (nsmall=1)
Run Code Online (Sandbox Code Playgroud)

我该怎么1,000.6办?

编辑:这不同于这个问题,询问格式3.14为3,14(被标记为可能的重复).

format r

25
推荐指数
4
解决办法
4万
查看次数

为什么R轮功能不是大数字

我需要一个R函数,它始终返回小数点后面的相同位数,无论参数有多大.我试过round()但是这样做不起作用.这是我的例子:

Rweb:> round(111234.678912,4) # expect 111234.6789
[1] 111234.7 
Rweb:> round(111234.678912/10,4) # expect 11123.4679    
[1] 11123.47 
Rweb:> round(111234.678912/100,4) # expect 1112.3468      
[1] 1112.347 
Rweb:> round(111234.678912/1000,4)     
[1] 111.2347 
Rweb:> round(111234.678912/10000,4)     
[1] 11.1235 
Run Code Online (Sandbox Code Playgroud)

如果参数是指数格式但我需要使用浮动格式的数字,它确实有效.

math statistics r rounding

15
推荐指数
1
解决办法
3253
查看次数

从R中的ftable对象创建一个乳胶表

在我提出问题之前,让我创建一些数据.

 my.data <- data.frame(A = sample(seq(1,100,by=5),10,replace=TRUE),W = rnorm(10),X =sample(1:10),Y = sample(c("yes", "no"), 10, replace = TRUE),Z=sample(c('a','b','c','d'),10,replace=TRUE))

attach(my.data)

my.d <- xtabs(W~Z+Y+A);my.d
table.data <- ftable(my.d)

result1 <- round(table.data,2)
Run Code Online (Sandbox Code Playgroud)

result1看起来像......

      A     6    11    16    26    71    76    86    91
Z Y                                                    
a no     0.00  0.00  0.00  0.00  0.00  0.00  0.00  0.00
 yes    0.00  0.56  0.00  0.00  0.00  0.79  0.00  0.01

b no     0.61  0.00 -0.22  0.14  0.00  0.00 -0.08  1.71
  yes    0.00  0.00  0.00  0.00  0.00  0.00  0.00  0.00

c no     0.00  0.00 …
Run Code Online (Sandbox Code Playgroud)

latex r xtable knitr

9
推荐指数
3
解决办法
2834
查看次数

设置打印的默认小数位数

我正在运行代码来生成输出,我希望所有输出都打印1个小数位.但是代码使用了我一般使用的函数,我不想在这些函数中指定打印输出是四舍五入的.

这个问题的答案格式化R中的小数位数建议使用options(digits=2)round(x, digits=2).

第一个选项是一般设置,非常适合舍入1.234到,1.2但会打印12.34512

如果放在函数中但第二个选项可以工作,但我不想触摸它们.如何设置这一般?

r decimal

7
推荐指数
2
解决办法
2万
查看次数

write.table 每列具有不同的数字格式

我想用 R 编写一些长表,并且希望能够控制每列的​​位数和格式。

R 中的控制数字之前已经在这里讨论过,但我想要一些带有两位数字的列,而其他列则写为 e 的指数。

我所拥有的是:

> tab = format(round(Ind_B, 2), nsmall = 2)
          logFC AveExpr     t P.Value adj.P.Val    B
PCL1      -1.50    7.90 -7.78    0.00      0.05 3.11
CYB5      -1.33    9.48 -7.29    0.00      0.05 2.66
YPL272C   -1.14    9.84 -6.75    0.00      0.05 2.12
...
Run Code Online (Sandbox Code Playgroud)

write.table(tab,file="table.txt")

我想要的是看起来像的东西

          logFC AveExpr     t  P.Value adj.P.Val    B
PCL1      -1.50    7.90 -7.78 2.02e-05   4.66e-2 3.11
CYB5      -1.33    9.48 -7.29 3.46e-05   4.66e-2 2.66
YPL272C   -1.14    9.84 -6.75 6.44e-05   4.66e-2 2.12
...
Run Code Online (Sandbox Code Playgroud)

输入数据:

> dput(Ind_B[1:2,])
structure(list(logFC = …
Run Code Online (Sandbox Code Playgroud)

formatting r digit

4
推荐指数
1
解决办法
371
查看次数

删除整个数据框中的句点/点

我有一个包含来自世界各地的参与者的大型数据集。其中一些参与者使用点/句号/逗号输入数据来表示千位分隔符,但 R 将它们读取为逗号,这完全扭曲了我的数据......例如 1234 变成 1,234。

我想删除所有点/句号/逗号。我的数据完全由完整数字组成,因此任何地方都不应该有任何小数。

我尝试使用 stringr,但不太明白。这是一个(我希望)可重现的示例,其中包含我的数据的一小部分样本:

structure(
  list(
    chnb = c(10L, 35L, 55L),
    B1_1_77 = c(117.586,
                4022, 4.921),
    C1_1_88 = c(NA, 2206, 1.111),
    C1_1_99 = c(6.172,
                1884, 0),
    C1_3_99 = c(5.62, 129, 0)
  ),
  row.names = c(NA,-3L),
  class = c("tbl_df",
            "tbl", "data.frame")
)
Run Code Online (Sandbox Code Playgroud)

我试过这个:

prob1 <- prob %>% str_replace_all('\\.', '')
Run Code Online (Sandbox Code Playgroud)

这给了我这个:

> prob
[1] "c(10, 35, 55)"         "c(117586, 4022, 4921)" "c(NA, 2206, 1111)"    
[4] "c(6172, 1884, 0)"      "c(562, 129, 0)"  
Run Code Online (Sandbox Code Playgroud)

它确实删除了这些点,但它给了我一个简单的列表,并且完全丢失了我的数据结构。在线搜索建议我这样做:

prob1 <- prob %>% mutate_all(list(str_replace(., '\\.', …
Run Code Online (Sandbox Code Playgroud)

r stringr dplyr

4
推荐指数
1
解决办法
9801
查看次数

在R中将字符转换为数字而不丢失小数

我们已经看到许多关于如何在将因子转换为数字(例如thisthis )时保存小数位的问题。但我没有看到任何对字符数据而不是因子数据执行相同操作的内容。以下是我尝试过但没有成功的方法:

f1 <- c("402313.01399128098", "402896.30908451998", "403165.63827027398", "403169.06116369402", "402891.96329268801", "402239.74412469601", 
        "402271.54950727499", "402313.01399128098")
as.numeric(as.character(f1)) # does not work

f2 <- as.factor(f1) 
as.numeric(as.character(f2)) # my decimals are GONE

f3 <- levels(f2) 
as.numeric(f3) # my decimals are gone again
Run Code Online (Sandbox Code Playgroud)

我明白了

[1] 402239.7 402271.5 402313.0 402892.0 402896.3 403165.6 403169.1
Run Code Online (Sandbox Code Playgroud)

回答/评论后更新:

没有丢失小数位。但我不知道为什么它没有显示。和options(digits = 15)可以看到所有的小数。

教训options():你可以在决定问这样的问题之前就跑。

r

3
推荐指数
1
解决办法
7956
查看次数

舍入到小数点后2位,同时在R中保留科学记数法

我正在从线性模型中下沉输出,并试图通过将我感兴趣的参数四舍五入到2位小数来整理它.这适用于大多数参数,如beta或Z-score,但我对P值有困难.虽然我想要舍入到2位小数,但我的意思是2位小数,同时保留科学记数法.

例如:

P = 2.60699382414341e-56

round(P,2)

#[1] 0
Run Code Online (Sandbox Code Playgroud)

当我真正想要打印的是:

#2.61e-56
Run Code Online (Sandbox Code Playgroud)

有办法做到这一点吗?

r rounding

2
推荐指数
2
解决办法
720
查看次数

R格式回归输出

有没有办法格式化系数估计值。值不是很小。我正在使用 LM 功能

                   Estimate Std. Error  t value Pr(>|t|) 

  (Intercept)      -1.041e+01  8.259e-02 -126.015  < 2e-16 ***
   QUANTITY         3.929e-01  1.684e-02   23.324  < 2e-16 ***
   WEIGHT           1.125e-04  3.650e-05    3.082  0.00206 ** 
   PACKAGES         5.702e+00  1.135e-01   50.228  < 2e-16 ***
   DEPT_COUNT       1.188e+01  8.834e-02  134.475  < 2e-16 ***
   PROD_CNT         1.062e+00  2.708e-02   39.220  < 2e-16 ***
Run Code Online (Sandbox Code Playgroud)

r

1
推荐指数
1
解决办法
1491
查看次数

如何在 R 中对列中的数字进行舍入?

如何将数据框中的列内的数字四舍五入到小数点后两位?

df 的名称是tax_data,我想要舍入的列称为rate_percent

我尝试使用:

format(round(rate_percent ,2), nsmall =2) but this didn't work.
Run Code Online (Sandbox Code Playgroud)

有没有人有什么建议?

r rounding dplyr tidyverse

1
推荐指数
1
解决办法
8427
查看次数