前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >29. R 数据整理(四:R 的格式化输出与自带的数据集)

29. R 数据整理(四:R 的格式化输出与自带的数据集)

作者头像
北野茶缸子
发布2021-12-17 09:21:54
1.1K0
发布2021-12-17 09:21:54
举报
文章被收录于专栏:北野茶缸子的专栏

格式化输出

format() 函数可以将一个数值型向量的各个元素按照统一格式转换为字符型。

比如:

代码语言:javascript
复制
> class(format(1.0))
[1] "character"

但不同于as.character(),format 函数可以控制输出的精度和宽度:

  • nsmall 控制非科学记数法显示时小数点后的至少要有的位数
  • digits 控制至少要有的有效位数
  • width 参数指定至少要有的输出宽度
代码语言:javascript
复制
format(c(pi, pi*10000), digits=8, nsmall=4)
## [1] " 3.1415927" "31415.9265359"

format(1.000, width=6, nsmall=2)
## [1] " 1.00"

sprintf 函数有点类似于py 中的printf 函数,可以可以把一个元素或 一个向量的各个元素按照 C 语言输出格式转换为字符型向量。第一个自变量是 C 语言格式的输出格式字符串,其 中%d 表示输出整数,%f 表示输出实数,%02d 表示输出宽度为 2、不够左填 0 的整数,%6.2f 表示输出宽度为 6、 宽度不足时左填空格、含两位小数的实数,等等。

借助这个功能,我们可以对文件进行一些格式化的命名,比如:

代码语言:javascript
复制
sprintf("tour%03d.jpg", c(1, 5, 10, 15, 100))
## [1] "tour001.jpg" "tour005.jpg" "tour010.jpg" "tour015.jpg" "tour100.jpg"

我们还可以传入多个向量,实现多个数据的格式化处理:

代码语言:javascript
复制
sprintf("%1dx%1d=%2d", 1:5, 5:1, (1:5)*(5:1))
## [1] "1x5= 5" "2x4= 8" "3x3= 9" "4x2= 8" "5x1= 5"

我们可以利用sprintf 实现字符串插值:

代码语言:javascript
复制
name <- " 李明"
tele <- "13512345678"

> sprintf("names: %s, teles: %s", name, tele)
[1] "names:  李明, teles: 13512345678"

stringr 包也提供了专门的函数:

代码语言:javascript
复制
name <- " 李明"
tele <- "13512345678"
str_glue(" 姓名: {name}\n电话号码: {tele}\n")


## 姓名: 李明
## 电话号码: 13512345678

其实如果愿意,paste 函数也可以实现这些~ 只不过paste 本身就不能批量处理了:

代码语言:javascript
复制
> sprintf("names: %s, teles: %s", name, tele)
[1] "names:  李明, teles: 13512345678" "names:  Tony, teles: 66666666"  

ps:sprintf 是基于底层c 开发的,应该使用起来会比paste+apply 要快把。

自带数据集

无论是R 的base 包,还是像tidyverse 套件中的数据处理相关的R 包,都提供了很多数据集,便于我们的实战。

其实查看它们也很方便:data() 就搞定了,其会返回一个列表,其中result 元素中包含了这些数据集信息的数据框:

代码语言:javascript
复制
> colnames(data()$results)
[1] "Package" "LibPath" "Item"    "Title"  

> table(data()$results[,"Package"])

datasets 
     104 

我们可以直接通过results 中的Item 中的内容使用它们:

代码语言:javascript
复制
> head(data()$results[,"Item"])
[1] "AirPassengers"          "BJsales"                "BJsales.lead (BJsales)" "BOD"                    "CO2"                   
[6] "ChickWeight"   

> head(CO2)
  Plant   Type  Treatment conc uptake
1   Qn1 Quebec nonchilled   95   16.0
2   Qn1 Quebec nonchilled  175   30.4
3   Qn1 Quebec nonchilled  250   34.8
4   Qn1 Quebec nonchilled  350   37.2
5   Qn1 Quebec nonchilled  500   35.3
6   Qn1 Quebec nonchilled  675   39.2
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-09-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 北野茶缸子 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 格式化输出
  • 自带数据集
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档