2013-08-28 41 views
8

Bây giờ, đã có một số câu hỏi rất giống nhau về SO về làm tròn và ý nghĩa, nhưng không giải quyết được vấn đề của tôi. Ở đây là:Số làm tròn đến gần 10 trong R

Làm thế nào để làm tròn số xảy ra một cách ngẫu nhiên như thế này:

data <- c(152.335, 39.431, 21.894) 

Tôi muốn có họ làm tròn như thế này:

c(150,40,20) 

Tôi đã thử:

print(formatC(signif(data,digits=2), digits=2,format="f")) 

Đầu ra:

[1] "150.00" "39.00" "22.00" 

Lệnh trên yêu cầu tôi thay đổi digits= thành 1 hoặc 2 để có được kết quả mong muốn. Nhưng, tôi muốn toàn cầu - phù hợp với mọi mệnh lệnh. Cảm ơn.

+0

SO 21,8 bước sang tuổi 20? điều này không có ý nghĩa. – Fernando

+0

Sao chép? http://stackoverflow.com/questions/6461209/how-to-round-up-to-the-nearest-10-or-100-or-x – Henrik

+0

@Fernando, có vẻ như số lần muốn tối đa là 10. – Henrik

Trả lời

17

Từ ?round

Làm tròn đến số chữ số âm có nghĩa là làm tròn thành một số điện của mười, vì vậy ví dụ 'vòng (x, chữ số = -2)' làm tròn đến số gần nhất.

Vì vậy,

data <- c(152.335, 39.431, 21.894) 
round(data, -1) 
#[1] 150 40 20 
+0

Giải pháp đơn giản của bạn hoạt động tuyệt vời. Cảm ơn. – Maximilian

2

Bạn thực sự muốn một đối số khác cho signif tại đây. Điều này dường như làm các trick - 2 chữ số cho số đầu tiên, một trong hai lần cuối:

R> dat <- c(152.335, 39.431, 21.894) 
R> dat 
[1] 152.335 39.431 21.894 
R> signif(dat, digits=c(2,1,1)) 
[1] 150 40 20 
R> 

Bạn có thể có thể khái quát này qua một cái gì đó giống như

R> signif(dat, digits=floor(log10(dat))) 
[1] 150 40 20 
R> 
+0

Cảm ơn. Trên thực tế chỉ cần phát hiện ra (như Henrik chỉ ra), lệnh gói plyr: round_any (dữ liệu, 5), làm những gì tôi cần. Nhưng giải pháp của bạn là từ R cơ bản và do đó không có gói yêu cầu! – Maximilian

Các vấn đề liên quan