소수 자릿수 형식 지정(R)
예를 들어 1.128347132904321674821과 같이 화면에 출력할 때 소수점 두 자리만 표시하고 싶은 숫자가 있습니다.사람이 어떻게 그걸 하니?
x <- 1.128347132904321674821
편집:
용도:
options(digits=2)
가능한 답변으로 제안되었습니다.스크립트 내에서 이것을 일회성 사용으로 지정할 수 있는 방법이 있습니까?스크립트에 추가하면 다른 기능은 없는 것 같고 각 번호를 포맷하기 위해 재입력하는 것에는 관심이 없습니다(매우 큰 보고서를 자동화하고 있습니다).
--
답변: 반올림(x, 숫자=2)
배경:이 페이지에서 제안된 몇 가지 답변(예:signif
,options(digits=...)
) 임의의 숫자에 대해 특정 수의 소수가 표시된다는 보장은 없습니다.저는 이것이 R의 디자인 특징이라고 생각합니다. 좋은 과학적 관행은 "유의한 수치"의 원칙에 기초하여 특정 숫자를 보여주는 것을 포함합니다.그러나 많은 도메인(예: APA 스타일, 비즈니스 보고서)에서 형식 지정 요구사항은 소수점 이하의 특정 숫자가 표시되도록 지정합니다.이 작업은 종종 중요한 수치를 고려하기보다는 일관성과 표준화를 목적으로 수행됩니다.
솔루션:
다음 코드는 정확하게 소수점 두 자리를 보여줍니다.x
.
format(round(x, 2), nsmall = 2)
예:
format(round(1.20, 2), nsmall = 2)
# [1] "1.20"
format(round(1, 2), nsmall = 2)
# [1] "1.00"
format(round(1.1234, 2), nsmall = 2)
# [1] "1.12"
.x
이고 이숫이고자입니다.k
표시할 소수점 이하의 수입니다. trimws
숫자 벡터가 있는 경우 유용할 수 있는 선행 공백을 제거합니다.
specify_decimal <- function(x, k) trimws(format(round(x, k), nsmall=k))
예.,
specify_decimal(1234, 5)
# [1] "1234.00000"
specify_decimal(0.1234, 5)
# [1] "0.12340"
대안 논의:
C 응답 형식과 sprintf 응답 형식은 매우 잘 작동합니다.하지만 원치 않을 수도 있는 경우에는 마이너스 0을 보일 것입니다.예.,
formatC(c(-0.001), digits = 2, format = "f")
# [1] "-0.00"
sprintf(-0.001, fmt = '%#.2f')
# [1] "-0.00"
이 문제를 해결할 수 있는 방법은 다음과 같습니다.
formatC(as.numeric(as.character(round(-.001, 2))), digits = 2, format = "f")
# [1] "0.00"
다음과 같이 숫자 형식을 지정할 수 있습니다.x
원하는 소수점 이하까지.여기서x
소수 자릿수가 많은 숫자입니다. 이하 해 보겠습니다.
x = 1111111234.6547389758965789345
y = formatC(x, digits = 8, format = "f")
# [1] "1111111234.65473890"
여기서format="f"
는 일반적인 소수점 이하의 부동 숫자를 제공합니다. 예를 들어, xxx.xxx 및digits
자릿수를 지정합니다.대조적으로, 표시할 정수를 얻으려면 다음을 사용합니다.format="d"
((으)로 표시됨sprintf
).
당신은 제 패키지를 테이블로 사용해 볼 수 있습니다.
> # devtools::install_github("renkun-ken/formattable")
> library(formattable)
> x <- formattable(1.128347132904321674821, digits = 2, format = "f")
> x
[1] 1.13
좋은점은,x
는 여전히 숫자 벡터이며 동일한 형식으로 더 많은 계산을 수행할 수 있습니다.
> x + 1
[1] 2.13
더 좋은 것은 숫자가 손실되지 않고 언제든지 더 많은 숫자로 다시 포맷할 수 있다는 것입니다 :)
> formattable(x, digits = 6, format = "f")
[1] 1.128347
소수점 이하 두 자리에 대해 0의 뒤를 계속 이어야 한다고 가정합니다.
sprintf(5.5, fmt = '%#.2f')
이는
[1] "5.50"
@mpag가 아래에서 언급했듯이, R은 때때로 이 값으로 예상치 못한 값을 제공할 수 있으며 라운드 방법(예: sprintf(5.5550, fmt='%#.2f')은 5.56이 아닌 5.55를 제공합니다.
비슷한 것:
options(digits=2)
자릿수 정의 옵션:
digits: controls the number of digits to print when printing numeric values.
고정 숫자보다 유의한 숫자를 선호하는 경우 signif 명령이 유용할 수 있습니다.
> signif(1.12345, digits = 3)
[1] 1.12
> signif(12.12345, digits = 3)
[1] 12.1
> signif(12345.12345, digits = 3)
[1] 12300
함수 확인 prettyNum, 형식
시행 0이 있는 경우(예: 123.1240) 사용sprintf(x, fmt='%#.4g')
함수formatC()
소수점 두 자리까지 숫자 형식을 지정하는 데 사용할 수 있습니다.결과 값에 후행 0이 포함된 경우에도 이 함수는 소수점 두 자리를 제공합니다.
이 변형을 K 소수점 인쇄에 사용합니다.
# format numeric value to K decimal places
formatDecimal <- function(x, k) format(round(x, k), trim=T, nsmall=k)
R의 숫자 객체는 두 배의 정밀도로 저장되므로 (약 16자리의) 정밀도를 얻을 수 있습니다. 나머지는 노이즈입니다.위에 표시된 숫자는 아마도 예시일 것이지만, 22자리 길이라는 것을 인정합니다.
내가 보기엔 뭔가가 되고 싶은 것 같습니다.
library(tutoR)
format(1.128347132904321674821, 2)
약간의 온라인 도움말에 따라.
만약 당신이 단지 숫자나 목록을 반올림하고 싶다면, 그냥 사용하세요.
round(data, 2)
그러면 데이터는 소수점 이하 2자리로 반올림됩니다.
저는 개선될 수 있지만 코너 케이스에서 잘 작동하는 것처럼 보이는 이 기능을 썼습니다.예를 들어, 0.9995의 경우, 정답 투표는 1.00을 제공하는데, 이는 잘못된 것입니다.저는 숫자에 소수가 없을 경우에 그 솔루션을 사용합니다.
round_correct <- function(x, digits, chars = TRUE) {
if(grepl(x = x, pattern = "\\.")) {
y <- as.character(x)
pos <- grep(unlist(strsplit(x = y, split = "")), pattern = "\\.", value = FALSE)
if(chars) {
return(substr(x = x, start = 1, stop = pos + digits))
}
return(
as.numeric(substr(x = x, start = 1, stop = pos + digits))
)
} else {
return(
format(round(x, 2), nsmall = 2)
)
}
}
예:
round_correct(10.59648, digits = 2)
[1] "10.59"
round_correct(0.9995, digits = 2)
[1] "0.99"
round_correct(10, digits = 2)
[1] "10.00"
library(dplyr)
# round the numbers
df <- df %>%
mutate(across(where(is.numeric), .fns = function(x) {format(round(x, 2), nsmall = 2)}))
여기서는 모든 숫자 값을 소수점 두 자리만 갖도록 변경합니다.소수점 이하로 변경해야 하는 경우
# round the numbers for k decimal places
df <- df %>%
mutate(across(where(is.numeric), .fns = function(x) {format(round(x, k), nsmall = k)}))
k를 원하는 소수 자릿수로 바꿉니다.
다음은 단위에서 백만 단위까지 접근하는 방법입니다. digits 매개 변수를 사용하여 유효한 최소 값 수(숫자 + 소수)를 조정할 수 있습니다.먼저 안쪽의 소수점 반올림을 조정할 수 있습니다.
number <-function(number){
result <- if_else(
abs(number) < 1000000,
format(
number, digits = 3,
big.mark = ".",
decimal.mark = ","
),
paste0(
format(
number/1000000,
digits = 3,
drop0trailing = TRUE,
big.mark = ".",
decimal.mark = ","
),
"MM"
)
)
# result <- paste0("$", result)
return(result)
}
언급URL : https://stackoverflow.com/questions/3443687/formatting-decimal-places-in-r
'programing' 카테고리의 다른 글
루비에서 &.(앰퍼샌드 도트)는 무엇을 의미합니까? (0) | 2023.06.05 |
---|---|
UITextView에서 클릭 링크를 가로채는 방법은 무엇입니까? (0) | 2023.06.05 |
장고 모델에서 목록을 저장하는 가장 효율적인 방법은 무엇입니까? (0) | 2023.06.05 |
이미지가 작아도 UITableViewCell의 이미지 보기를 고정 크기로 만드는 방법 (0) | 2023.06.05 |
미학 및 gem_text를 사용할 때 범례에서 'a' 제거 (0) | 2023.06.05 |