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可以处理的最大限制吗?
我想用千位分隔符格式化数字并指定小数位数.我知道如何分开做这些,但不能一起做.
比如,我用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(被标记为可能的重复).
我需要一个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)
如果参数是指数格式但我需要使用浮动格式的数字,它确实有效.
在我提出问题之前,让我创建一些数据.
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) 我正在运行代码来生成输出,我希望所有输出都打印1个小数位.但是代码使用了我一般使用的函数,我不想在这些函数中指定打印输出是四舍五入的.
这个问题的答案格式化R中的小数位数建议使用options(digits=2)或round(x, digits=2).
第一个选项是一般设置,非常适合舍入1.234到,1.2但会打印12.345为12
如果放在函数中但第二个选项可以工作,但我不想触摸它们.如何设置这一般?
我想用 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) 我有一个包含来自世界各地的参与者的大型数据集。其中一些参与者使用点/句号/逗号输入数据来表示千位分隔符,但 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) 我们已经看到许多关于如何在将因子转换为数字(例如this和this )时保存小数位的问题。但我没有看到任何对字符数据而不是因子数据执行相同操作的内容。以下是我尝试过但没有成功的方法:
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():你可以在决定问这样的问题之前就跑。
我正在从线性模型中下沉输出,并试图通过将我感兴趣的参数四舍五入到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)
有办法做到这一点吗?
有没有办法格式化系数估计值。值不是很小。我正在使用 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) 如何将数据框中的列内的数字四舍五入到小数点后两位?
df 的名称是tax_data,我想要舍入的列称为rate_percent
我尝试使用:
format(round(rate_percent ,2), nsmall =2) but this didn't work.
Run Code Online (Sandbox Code Playgroud)
有没有人有什么建议?