Steem 和 R 语言:跟大鹏学 R 语言(7)读取文件(续)

in #cn6 years ago (edited)

前情回顾:

本文选自《学 R:零基础学习 R 语言》(研究出版社,大鹏、李怡著,2018)第二章,有改动。

不习惯命令行的用户,可以通过下面的指令获取这个文件的路径(请在敲入时练习一下前面说过的“箭头快捷键“和“tab小助理”):

myfile1 <- file.choose()

在弹出的窗口中选择文件c盘下r4r文件夹里的co2.csv。

好了,现在我们看看myfile1的值是什么。在RStudio运行:

myfile1
## [1] "c:/r4r/co2.csv"

是刚才选取文件的路径。这是获取路径的方法之一,比较符合很多人喜欢鼠标选择文件的习惯,但比较麻烦,每次使用这个代码时都得点一次。一般来说,我们存放数据的路径是固定不变的,所以更常用的方法,是在代码里直接敲入文件路径:

myfile2 <- "c:/r4r/co2.csv"
myfile2
## [1] "c:/r4r/co2.csv"

跟鼠标选取文件的结果完全相同。

注意:

  • 路径的名称前后要用引号(单双都行,但要成对儿),表示这是一个字符串。
  • 文件路径中上下级文件夹之间的斜线必须是斜线(/ )而不是反斜线(\), Windows用户一定要注意!其中的道理我们暂不深究。

myfile2里存储的文件路径,并不是文件内容。R现在知道文件在哪里,却不知道里面是什么内容。现在,我们让 R 读取文件的内容。

mydata2 <- read.table(file = myfile2, header = TRUE, sep = ",")
mydata2

sep参数表示数据列的分隔符,这里设置为逗号,表示读取逗号分隔的数据。

你也许会说,read.table() 括号里那么多东西,用起来也太复杂了吧?怎么记得住?对,谁都记不住,现在我们有请助理团的第二位成员隆重登场!只需要把光标放到代码read.table的任何一个字符处,按键盘的F1键,RStudio此时会在右下面板显示帮助信息,有详细的解释和实例。好好读读帮助吧,以后你会发现,F1小助理是仅次于tab的常用操作。除了tab小助理和F1小助理外,以后我们会介绍更多的小助理跟你见面。

小贴士 2.1 R菜鸟入门三大法宝

  • 第一法宝:助理!以F1和tab键为首的豪华助理团,简直就是身边的诸葛亮,可以随时方便地寻求帮助。
  • 第二法宝:猎狗!就是搜索引擎。遇见问题不懂就上网搜,你会发现,早就有人提出类似的问题并解决了。
  • 第三法宝:顾问!就是论坛。内事不决问统都(中文论坛),外事不决问爆栈(英文论坛)

为了省事儿,我们可以用read.table()的瘦身简化版read.csv()函数,用来专门读取逗号分隔的.csv文件:

mydata2 <- read.csv(file = myfile2)

跟上一条指令的效果完全相同。到此为止,数据文件中的数据就被R读进了他的脑子里。mydata1和mydata2这种二维表格数据,叫做“数据框”。

你可能会觉得麻烦,怎么在Excel里双击一下就搞定的事,在R里边却这么麻烦?是的,R对数据的读入并非“傻瓜”操作,也许在读数据上R比Excel麻烦10倍,但只要读进去了,后面会省事百倍千倍。而且,如果需要读入千百个数据文件,那么配合后面讲的循环语句可以轻松搞定,而不必双击千百次。相信我们,磨刀不误砍柴工。

其实,上面的过程是一套分解动作,让我们容易理解读取数据的过程。实际应用时,只需一行代码:

mydata2 <- read.csv(file = "c:/r4r/co2.csv")

思考 2.1 细心的你也许会留意,本章开头有个write.csv()函数,跟read.csv()有什么关系?既然read.csv()read.table()的瘦身版,那么会不会有个write.table()函数呢?要弄清楚这些问题,请试试你的三大法宝。

在RStudio中,像ctrl+shift+n、tab和F1这样的快捷键操作还有很多。从RStudio菜单栏选择Tools – Keyboard Shortcuts Help,或者直接按alt+shift+k键,就会弹出一本快捷键魔法书。

Sort:  

大鹏哥讲的很细致诶!我都还没遇到啥实在搞不定的问题…

是不是不过瘾?下回咱们来点猛的如何?

好怕!来来来,挑战自我~

@dapeng, 码农你好,但是我一直有点犹豫要不要点赞,说出来你可能不信,我练过一阳指,我这个赞要是点下去,你搞不好会死!

@dapeng You have received a random upvote from @looktothefuture because this post did not use any bidbots.

If you use the the #nobidbot tag as one of your five tags on future posts, you may be selected for a random upvote from @transparencybot.

Coin Marketplace

STEEM 0.30
TRX 0.12
JST 0.034
BTC 63877.55
ETH 3143.56
USDT 1.00
SBD 3.97