首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >增加小数位置- Swirl -r Programming Environment 12 -数据操作

增加小数位置- Swirl -r Programming Environment 12 -数据操作
EN

Stack Overflow用户
提问于 2018-01-19 21:09:11
回答 2查看 390关注 0票数 0

我正在处理一个来自swirl,r Programming Environment 12 Data Manipulation的问题。我想不出如何让r给我小数点后的正确位数。

我的代码:

代码语言:javascript
复制
 titanic_4 <- titanic %>% 
  select(Survived, Pclass, Age, Sex) %>%
  filter(!is.na(Age)) %>%
  mutate(agecat = cut(Age, breaks = c(0, 14.99, 50, 150), 
                      include.lowest = TRUE,
                      labels = c("Under 15", "15 to 50",
                                 "Over 50"))) %>%
  group_by(Pclass,agecat,Sex) %>%
  summarize(N=n(), survivors = sum(Survived))%>%
  mutate(perc_survived = (survivors/N)*100.000000)

head(titanic_4)

提供:

代码语言:javascript
复制
# A tibble: 6 x 6
# Groups:   Pclass, agecat [3]
  Pclass   agecat    Sex     N survivors perc_survived
   <int>   <fctr>  <chr> <int>     <int>         <dbl>
1      1 Under 15 female     2         1      50.00000
2      1 Under 15   male     3         3     100.00000
3      1 15 to 50 female    70        68      97.14286
4      1 15 to 50   male    72        32      44.44444
5      1  Over 50 female    13        13     100.00000
6      1  Over 50   male    26         5      19.23077

但是,我希望R在perc_survived中给我六位小数,这样它看起来就像这样:

代码语言:javascript
复制
## Pclass   agecat    Sex      N     survivors   perc_survived
## <int>   <fctr>    <chr>   <int>     <int>         <dbl>
##   1    Under 15  female     2         1        50.000000
##   1    Under 15    male     3         3       100.000000
##   1    15 to 50  female    70        68        97.142857
##   1    15 to 50    male    72        32        44.444444
##   1    Over 50   female    13        13       100.000000
##   1    Over 50     male    26         5        19.230769

谁能告诉我怎么让r保留小数点后6位?

我尝试过sprintf:

代码语言:javascript
复制
> titanic_4 <- titanic %>% 
+     select(Survived, Pclass, Age, Sex) %>%
+     filter(!is.na(Age)) %>%
+     mutate(agecat = cut(Age, breaks = c(0, 14.99, 50, 150), 
+                         include.lowest = TRUE,
+                         labels = c("Under 15", "15 to 50",
+                                    "Over 50"))) %>%
+     group_by(Pclass,agecat,Sex) %>%
+     summarize(N=n(), survivors = sum(Survived))%>%
+     mutate(perc_survived = sprintf("%.6f",((survivors/N)*100.000000)))
> 
> head(titanic_4)

这就给出了:

代码语言:javascript
复制
# A tibble: 6 x 6
# Groups:   Pclass, agecat [3]
  Pclass   agecat    Sex     N survivors perc_survived
   <int>   <fctr>  <chr> <int>     <int>         <chr>
1      1 Under 15 female     2         1     50.000000
2      1 Under 15   male     3         3    100.000000
3      1 15 to 50 female    70        68     97.142857
4      1 15 to 50   male    72        32     44.444444
5      1  Over 50 female    13        13    100.000000
6      1  Over 50   male    26         5     19.230769

添加sprintf纠正了小数位的问题,但也带来了新的问题。<chr>将列类型从sprintf更改为sprintf。

Swirl不会接受这个答案。有谁知道另一种方法吗?

非常感谢!

EN

回答 2

Stack Overflow用户

发布于 2018-01-19 22:03:53

您可以使用

代码语言:javascript
复制
> sprintf("%.6f", .1)
[1] "0.100000"
票数 0
EN

Stack Overflow用户

发布于 2018-01-26 00:39:08

sprintf是一个字符串操作函数,因此根据定义它将返回一个字符串。如果您只是简单地尝试四舍五入到一组数字,则roundsignif (有效数字)都应该有效。两者都有要保留的位数的参数。所以看起来mutate(perc_survived = round((survivors / N) * 100, digits = 6))会给你想要的东西。如果您想要有效数字的数量,而不是简单的四舍五入,请使用signif

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48341878

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档