科學計算常對數字格式有所要求,最常見的就是保留數字的有效位數。在r語言中處理數字格式的函式主要有round、signif、sprintf和format。
最常用的round(x, digits = 0)函式是四捨五入保留有效位數,其引數x是要進行處理的資料,digits是從小數點算起要保留的有效位數。注意,digits可以取負數,假如取-2,即意味著保留百位數。另外,儘管round是四捨五入取值,但也有特例,如round(0.5) = 0。
signif(x, digits = 6)函式與round類似,也是四捨五入取數,只是digits是從第乙個數字開始算有效位數。
> round(15.3589, 3)
[1] 15.359
> signif(15.3589, 3)
[1] 15.4
但是round和signif有乙個問題,假如對2.9999保留兩位小數,得到的結果是3而不是3.00,它們會自動把小數點後面最後的0省略。這個問題可以用format函式解決。
format(x, trim = false, digits = null, nsmall = 0l,
justify = c("left", "right", "centre", "none"),
width = null, na.encode = true, scientific = na,
big.mark = "", big.interval = 3l,
small.mark = "", small.interval = 5l,
decimal.mark = getoption("outdec"),
zero.print = null, drop0trailing = false, ...)
format函式的作用是使x中各元素統一成一樣的格式,具體來說是將它們統一為相同的寬度,不足的用空格補齊,這時數字會自動轉化為字元。例如:
> format(c('a', 'bb', 'ccc'))
[1] "a " "bb " "ccc"
> format(1:10)
[1] " 1" " 2" " 3" " 4" " 5" " 6" " 7" " 8" " 9" "10"
注意上圖中數字1-9前面的空格。
當trim為true時,數字型元素中的空格會被省略;digits是數字保留的有效位數,nsmall是小數點後最少保留的位數。對2.9999保留兩位小數,可以使用format(2.999, digits = 3, nsmall = 2),digits和nsmall引數需聯合使用,只使用nsmall = 2還會返回2.999,這是因為nsmall = 2表示小數點後至少保留2位小數,原始資料有3位小數時將保留3位。
> format(2.999, digits = 3, nsmall = 2)
[1] "3.00"
> format(2.999, digits = 3)
[1] "3"
> format(2.999, nsmall = 2)
[1] "2.999"
如需使用科學計數法,需將引數scientific設為true。
> format(1234567, scientific = t)
[1] "1.234567e+06"
除了保留小數字數,還有一種常用的數字格式是將整數統一為相同的位數,不足的在前面加0,如將1補為001,這時需使用sprintf(fmt, ...)函式。sprintf函式取自c語言,引數fmt即最終輸出的格式。sprintf(fmt, x)意味著將x按fmt中給出的格式插入到fmt中%符號所在的位置。
> sprintf("%s is %f feet tall\n", "sven", 7.1)
[1] "sven is 7.100000 feet tall\n"
上式意味著將sven插入到%s is %f feet tall\n這句話的%s處,將7.1插入到%f處,其中字尾s和f代表了資料格式是字元型和雙精度數字。如果是整數型數字,可用d, i, o, x, x做字尾,其中o代表轉化為八進位制整數格式,x和x代表轉化為十六進製制整數格式。
> sprintf("%o", 7:11)
[1] "7" "10" "11" "12" "13"
> sprintf("%x", 9:17)
[1] "9" "a" "b" "c" "d" "e" "f" "10" "11"
> sprintf("%x", 9:17)
[1] "9" "a" "b" "c" "d" "e" "f" "10" "11"
將1補為001可以使用sprintf(『%03d』, 1)實現。
> sprintf('%03d', 1)
[1] "001"
展示較大的數字時通常需要新增千分符,例如100,000,000,如果沒有這兩個逗號,100000000就得乙個零乙個零的去數,不方便大家對數字產生直觀的認識。在r語言可以使用prettynum自動新增千分符,處理後的資料自動轉化為字元型(character)。
prettynum(x, big.mark = "", big.interval = 3l,
small.mark = "", small.interval = 5l,
decimal.mark = getoption("outdec"), input.d.mark = decimal.mark,
preserve.width = c("common", "individual", "none"),
zero.print = null, replace.zero = false,
drop0trailing = false, is.cmplx = na,
...)
其中,x是要處理的資料,可以是數值型也可以是字元型,big.mark是在小數點左邊新增的分隔符,big.interval規定每隔幾位新增分隔符,預設為3(就是千分符),如果改為4就是萬分符, small.mark是在小數點右邊新增分隔符,small.interval是它的分隔位數。
> # 以逗號為分隔
> prettynum(372638624, big.mark = ',')
[1] "372,638,624"
> # 以空格為分隔
> prettynum(372638624, big.mark = ' ')
[1] "372 638 624"
> # 萬分符
> prettynum(372638624, big.mark = ',', big.interval = 4)
[1] "3,7263,8624"
R語言數字顯示設定
r語言設定顯示常用的命令是options format signif等 options主要是用來設定可以改變r的計算和顯示結果全域性選項。如果用該命令後還是顯示不全,則可以把變數轉換成字元型然後再轉換成數值型,再進行顯示。options digits 7 控制要列印數值的位數 最大只能到22 opt...
R語言中如何處理時間格式
將字串轉換為時間 d as.date 2015 5 6 d 獲取月份 months d 獲取星期 weekdays d 結果 d 1 2015 05 06 months d 1 五月 weekdays d 1 星期三 如何提取季節,月份,使用lubridate包 年份 year datae 月份 m...
r語言electricity資料集 R語言 資料集
第二章 建立資料集 1.r語言的資料型別 數值型 字元型 邏輯型 複數型 虛數 和原生型 位元組 2.資料結構 a.向量 儲存數值型 字元型和邏輯型資料的一維陣列 a c 1,2,3,4,5 建立 組合功能的函式c a 1 1 2 3 4 5 a c 1,4 訪問 方括號 向量中指定的元素 1 1 ...