Tibble / Data_frame没有使用mutate_if()

时间:2018-05-24 10:57:37

标签: r dplyr rounding tibble

我有tibble具有与此相似的特征:

set.seed(123)


df <- tibble(
  x = sample(LETTERS[1:3],10,T),
  y = rdunif(10,7.5),
  z = rdunif(10,7.5)
) 

哪个收益率:

# A tibble: 10 x 3
   x         y     z
   <chr> <dbl> <dbl>
 1 A      8.00  7.00
 2 C      4.00  6.00
 3 B      6.00  5.00
 4 C      5.00  8.00
 5 C      1.00  5.00
 6 A      7.00  6.00
 7 B      2.00  5.00
 8 C      1.00  5.00
 9 B      3.00  3.00
10 B      8.00  2.00

我想使用mutate_if()对数字变量进行舍入;我正在使用此代码。

df %>% 
  mutate_if(is.numeric, funs(round(., 1)))

其产生与上述相同(无四舍五入)。

# A tibble: 10 x 3
   x         y     z
   <chr> <dbl> <dbl>
 1 A      8.00  7.00
 2 C      4.00  6.00
 3 B      6.00  5.00
 4 C      5.00  8.00
 5 C      1.00  5.00
 6 A      7.00  6.00
 7 B      2.00  5.00
 8 C      1.00  5.00
 9 B      3.00  3.00
10 B      8.00  2.00

我没有收到任何警告,代码似乎运行正常。我只是没有得到我期待的答案。

ANSWER

我没有问正确的问题。我希望限制tibble中数字列的位数。我在baseR中寻找sprintf函数。

df %>%
  mutate_if(is.numeric, funs(sprintf("%0.1f", .)))

1 个答案:

答案 0 :(得分:1)

设置打印tibbles时的有效位数

options(pillar.sigfig=1)

控制tibble打印的不同options

我生成了新的数据,我在之前和之后展示了这些数据。设置选项后

# # A tibble: 10 x 3
   # x          y      z
   # <chr>  <dbl>  <dbl>
 # 1 A     0.0458 0.665 
 # 2 B     0.442  0.0948
 # 3 B     0.799  0.384 
 # 4 B     0.122  0.274 
 # 5 A     0.561  0.815 
 # 6 A     0.207  0.449 
 # 7 A     0.128  0.810 
 # 8 B     0.753  0.812 
 # 9 A     0.895  0.794 
# 10 C     0.374  0.440 


# # A tibble: 10 x 3
   # x         y     z
   # <chr> <dbl> <dbl>
 # 1 A      0.05  0.7 
 # 2 B      0.4   0.09
 # 3 B      0.8   0.4 
 # 4 B      0.1   0.3 
 # 5 A      0.6   0.8 
 # 6 A      0.2   0.4 
 # 7 A      0.1   0.8 
 # 8 B      0.8   0.8 
 # 9 A      0.9   0.8 
# 10 C      0.4   0.4