R语言学习笔记(11)-数据获取、读入&写入

参考视频:(28 29 30)
https://www.bilibili.com/video/BV19x411X7C6?p=28
https://www.bilibili.com/video/BV19x411X7C6?p=29

一、获取数据

  1. 三种途径
    (1)利用键盘来输入数据
    eg.输入病例数据


    病例数据.png
#每一列用一个变量存储起来
> patientID <- c(1,2,3,4)
> admdate <- c("10/15/2009","11/01/2009","10/21/2009","10/28/2009")
> age <- c(25, 34, 28, 52)
> diabetes <- c("Type1", "Type2", "Type1", "Type1")
> status <- c("Poor", "Improved", "Excellent", "Poor")
#生成数据框
> data <- data.frame(patientID, age, diabetes, status)
> data
  patientID age diabetes    status
1         1  25    Type1      Poor
2         2  34    Type2  Improved
3         3  28    Type1 Excellent
4         4  52    Type1      Poor

edit():自动调用一个允许手动输入的文本编辑器。需要首先定义一个变量,然后用edit()修改这个变量,否则输入的数据无法保存

> data2 <- data.frame(patientID=character(0), age=numeric(0),
+                     diabetes=character(), status=character())
> data2 <- edit(data2)

数据编辑器.png

将数据输入到编辑框中,编辑完成后关闭即可,数据便会保存到刚才的变量中。
若没有提前定义变量,数据便无法保存
若是在Linux系统下,则会打开vim编辑器,用空格分隔即可。

如果想修改数据,再调用edit,修改后赋值给原变量即可
fix()函数也可修改,可直接保存
(2)通过读取存储在外部文件上的数据
利用R读取的文件,最好是经过处理适合R使用的文件。可利用Python、Perl来对数据进行预处理,然后将统计结果导入R进行分析。
(3)通过访问数据库系统来获取数据
在R中,可通过ODBC(open database connectivity)访问数据库。可用R读取数据库内容,同时还可将R处理后的结果写入到数据库内。
还可通过DBI包访问数据库,可实现通过驱动程序连接至数据库,为不同数据库提供了一种通用语法。
要使用某种数据库,需要下载其与DBI相连的包才能使用。

> install.packages("RODBC")

二、读入文件

1.read.table


read.table.png

readinput.png

(1)file

#纯文本文件 .txt
>read.table("input.txt")
#读入文件
> x <- read.table("input.txt")//R默认给每一行添加行号
#文件内容较大,可使用head()、tail()来截取文件头部和尾部固定行数,默认为六行。
> head(x)
  Ozone Solar.R Wind Temp Month Day
1    41     190  7.4   67     5   1
2    36     118  8.0   72     5   2
3    12     149 12.6   74     5   3
4    18     313 11.5   62     5   4
5    NA      NA 14.3   56     5   5
6    28      NA 14.9   66     5   6
> tail(x)
    Ozone Solar.R Wind Temp Month Day
148    14      20 16.6   63     9  25
149    30     193  6.9   70     9  26
150    NA     145 13.2   77     9  27
151    14     191 14.3   75     9  28
152    18     131  8.0   76     9  29
153    20     223 11.5   68     9  30
> head(x, n = 10)
> head(x,n = 10)
   Ozone Solar.R Wind Temp Month Day
1     41     190  7.4   67     5   1
2     36     118  8.0   72     5   2
3     12     149 12.6   74     5   3
4     18     313 11.5   62     5   4
5     NA      NA 14.3   56     5   5
6     28      NA 14.9   66     5   6
7     23     299  8.6   65     5   7
8     19      99 13.8   59     5   8
9      8      19 20.1   61     5   9
10    NA     194  8.6   69     5  10
#若文件不在该目录下,可使用全路径(绝对or相对路径),必须是完整文件路径,无法读取目录

(2)sep指定分隔符

> x <- read.table("input.csv")
#不设置,则很乱
> x
                    V1
1                     
2            Mazda RX4
3        Mazda RX4 Wag
4           Datsun 710
5       Hornet 4 Drive
6    Hornet Sportabout
7              Valiant
8           Duster 360
9            Merc 240D
10            Merc 230
11            Merc 280
12           Merc 280C
13          Merc 450SE
14          Merc 450SL
15         Merc 450SLC
16  Cadillac Fleetwood
17 Lincoln Continental
18   Chrysler Imperial
19            Fiat 128
20         Honda Civic
21      Toyota Corolla
22       Toyota Corona
23    Dodge Challenger
24         AMC Javelin
25          Camaro Z28
26    Pontiac Firebird
27           Fiat X1-9
28       Porsche 914-2
29        Lotus Europa
30      Ford Pantera L
31        Ferrari Dino
32       Maserati Bora
33          Volvo 142E
                                                                    V2
1  ,"mpg","cyl","disp","hp","drat","wt","qsec","vs","am","gear","carb"
2                                 ,21,6,160,110,3.9,2.62,16.46,0,1,4,4
3                                ,21,6,160,110,3.9,2.875,17.02,0,1,4,4
4                               ,22.8,4,108,93,3.85,2.32,18.61,1,1,4,1
5                             ,21.4,6,258,110,3.08,3.215,19.44,1,0,3,1
6                              ,18.7,8,360,175,3.15,3.44,17.02,0,0,3,2
7                              ,18.1,6,225,105,2.76,3.46,20.22,1,0,3,1
8                              ,14.3,8,360,245,3.21,3.57,15.84,0,0,3,4
9                                ,24.4,4,146.7,62,3.69,3.19,20,1,0,4,2
10                             ,22.8,4,140.8,95,3.92,3.15,22.9,1,0,4,2
11                            ,19.2,6,167.6,123,3.92,3.44,18.3,1,0,4,4
12                            ,17.8,6,167.6,123,3.92,3.44,18.9,1,0,4,4
13                            ,16.4,8,275.8,180,3.07,4.07,17.4,0,0,3,3
14                            ,17.3,8,275.8,180,3.07,3.73,17.6,0,0,3,3
15                              ,15.2,8,275.8,180,3.07,3.78,18,0,0,3,3
16                             ,10.4,8,472,205,2.93,5.25,17.98,0,0,3,4
17                               ,10.4,8,460,215,3,5.424,17.82,0,0,3,4
18                            ,14.7,8,440,230,3.23,5.345,17.42,0,0,3,4
19                              ,32.4,4,78.7,66,4.08,2.2,19.47,1,1,4,1
20                            ,30.4,4,75.7,52,4.93,1.615,18.52,1,1,4,2
21                             ,33.9,4,71.1,65,4.22,1.835,19.9,1,1,4,1
22                            ,21.5,4,120.1,97,3.7,2.465,20.01,1,0,3,1
23                             ,15.5,8,318,150,2.76,3.52,16.87,0,0,3,2
24                             ,15.2,8,304,150,3.15,3.435,17.3,0,0,3,2
25                             ,13.3,8,350,245,3.73,3.84,15.41,0,0,3,4
26                            ,19.2,8,400,175,3.08,3.845,17.05,0,0,3,2
27                               ,27.3,4,79,66,4.08,1.935,18.9,1,1,4,1
28                               ,26,4,120.3,91,4.43,2.14,16.7,0,1,5,2
29                            ,30.4,4,95.1,113,3.77,1.513,16.9,1,1,5,2
30                              ,15.8,8,351,264,4.22,3.17,14.5,0,1,5,4
31                              ,19.7,6,145,175,3.62,2.77,15.5,0,1,5,6
32                                ,15,8,301,335,3.54,3.57,14.6,0,1,5,8
33                              ,21.4,4,121,109,4.11,2.78,18.6,1,1,4,2
> x <- read.table("input.csv",sep = ",")
> x
                    V1   V2  V3    V4  V5   V6    V7    V8 V9 V10  V11  V12
1                       mpg cyl  disp  hp drat    wt  qsec vs  am gear carb
2            Mazda RX4   21   6   160 110  3.9  2.62 16.46  0   1    4    4
3        Mazda RX4 Wag   21   6   160 110  3.9 2.875 17.02  0   1    4    4
4           Datsun 710 22.8   4   108  93 3.85  2.32 18.61  1   1    4    1
5       Hornet 4 Drive 21.4   6   258 110 3.08 3.215 19.44  1   0    3    1
6    Hornet Sportabout 18.7   8   360 175 3.15  3.44 17.02  0   0    3    2
7              Valiant 18.1   6   225 105 2.76  3.46 20.22  1   0    3    1
8           Duster 360 14.3   8   360 245 3.21  3.57 15.84  0   0    3    4
9            Merc 240D 24.4   4 146.7  62 3.69  3.19    20  1   0    4    2
10            Merc 230 22.8   4 140.8  95 3.92  3.15  22.9  1   0    4    2
11            Merc 280 19.2   6 167.6 123 3.92  3.44  18.3  1   0    4    4
12           Merc 280C 17.8   6 167.6 123 3.92  3.44  18.9  1   0    4    4
13          Merc 450SE 16.4   8 275.8 180 3.07  4.07  17.4  0   0    3    3
14          Merc 450SL 17.3   8 275.8 180 3.07  3.73  17.6  0   0    3    3
15         Merc 450SLC 15.2   8 275.8 180 3.07  3.78    18  0   0    3    3
16  Cadillac Fleetwood 10.4   8   472 205 2.93  5.25 17.98  0   0    3    4
17 Lincoln Continental 10.4   8   460 215    3 5.424 17.82  0   0    3    4
18   Chrysler Imperial 14.7   8   440 230 3.23 5.345 17.42  0   0    3    4
19            Fiat 128 32.4   4  78.7  66 4.08   2.2 19.47  1   1    4    1
20         Honda Civic 30.4   4  75.7  52 4.93 1.615 18.52  1   1    4    2
21      Toyota Corolla 33.9   4  71.1  65 4.22 1.835  19.9  1   1    4    1
22       Toyota Corona 21.5   4 120.1  97  3.7 2.465 20.01  1   0    3    1
23    Dodge Challenger 15.5   8   318 150 2.76  3.52 16.87  0   0    3    2
24         AMC Javelin 15.2   8   304 150 3.15 3.435  17.3  0   0    3    2
25          Camaro Z28 13.3   8   350 245 3.73  3.84 15.41  0   0    3    4
26    Pontiac Firebird 19.2   8   400 175 3.08 3.845 17.05  0   0    3    2
27           Fiat X1-9 27.3   4    79  66 4.08 1.935  18.9  1   1    4    1
28       Porsche 914-2   26   4 120.3  91 4.43  2.14  16.7  0   1    5    2
29        Lotus Europa 30.4   4  95.1 113 3.77 1.513  16.9  1   1    5    2
30      Ford Pantera L 15.8   8   351 264 4.22  3.17  14.5  0   1    5    4
31        Ferrari Dino 19.7   6   145 175 3.62  2.77  15.5  0   1    5    6
32       Maserati Bora   15   8   301 335 3.54  3.57  14.6  0   1    5    8
33          Volvo 142E 21.4   4   121 109 4.11  2.78  18.6  1   1    4    2

(3)header 若第一行是变量名称,header = TRUE

> read.table("input 1.txt",header = TRUE)

(4)skip 控制从哪一行开始读

read.table("input 1.txt",header = TRUE,skip = 5)

(5)nrow 读取文件行数
只想读取文件部分内容,skip+nrow,读取任何部分

#读取文件的第51行-第250行
> read.table("input 1.txt",header = TRUE,skip = 50,nrow = 200)

(6)stringsAsFactors 控制读入字符串是否转化为因子
R在读取数据时,数字会读取称数值型数据;读取字符串时,R默认将所有字符串转化为因子类型。但很多情况下不需要这种转换,需要将stringAsFactors设置为false

其他read系列读取函数
read.csv(默认分隔符为逗号)、
read.delim(默认使用制表符分割)
read.fwf(读取固定跨度的文件,每一列都开始于一个特定的位置)还要给出每一列所占有的宽度值

  1. 若文件不在本机,R还支持读取网络文件
    需要将文件名修改为对应网址,可以是http ftp,可以是局域网内file开头的完整地址

  2. 读取非文本文件
    (1)HTML文件,可以使用XML包
    readHTMLTable可用来读取网页中的数据,网页中大量内容可用grep、discard来进行筛选。
    若只读取表格数据,可使用which参数。eg.which = 3,只读取网页中第三个表格

> install.packages("XML")
> library(XML)

(2)转化成csv文件
如一个Excel文件,另存为-存储为csv格式
(3)foreign包


foreign.png

(4)其他格式
若遇到其他foreign包不支持格式的文件,则可存储为文本文件或者搜索R中对应的包。
eg.想要处理matlab格式文件,则可用RSiteSearch()进行网络搜索
(5)剪切板上的数据

#首先复制数据到剪切板
> x <- read.table("clipboard",header = T,sep = ",")
#或是使用readClipboard()函数
> readClipboard()

(6)压缩文件(无需解压缩)
R可以直接读取

> read.table(gzfile("input.txt.gz"))

(7)不规则格式文件
函数:readLines()、scan()

#readLines() 参数n,限制读入的最大行数
> readLines("input.csv", n = 15)
#scan()每次读取一个单元,并根据指令进行处理。
#what:scan所期望读取文件的单元。
![scan.png](https://upload-images.jianshu.io/upload_images/19791022-7b17eaef521ba801.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

> scan("scan.txt",what = list(character(3),numeric(0),numeric(0)))
Read 20 records
[[1]]
 [1] "one"  "four" "one"  "four" "one"  "four" "one"  "four" "one"  "four" "one" 
[12] "four" "one"  "four" "one"  "four" "one"  "four" "one"  "four"

[[2]]
 [1] 2 5 2 5 2 5 2 5 2 5 2 5 2 5 2 5 2 5 2 5

[[3]]
 [1] 3 6 3 6 3 6 3 6 3 6 3 6 3 6 3 6 3 6 3 6
> scan("scan.txt",what = list(character(3),numeric(2),numeric(2)))
Read 20 records
[[1]]
 [1] "one"  "four" "one"  "four" "one"  "four" "one"  "four" "one"  "four" "one" 
[12] "four" "one"  "four" "one"  "four" "one"  "four" "one"  "four"

[[2]]
 [1] 2 5 2 5 2 5 2 5 2 5 2 5 2 5 2 5 2 5 2 5

[[3]]
 [1] 3 6 3 6 3 6 3 6 3 6 3 6 3 6 3 6 3 6 3 6

三、写入文件

  1. write()
    与read系列函数相对应
    cat():将数据显示在屏幕
    write():将数据写入文件


    write.png

    若为数据框,则使用write.table()
    若写入csv文件,则使用write.csv()
    (1)参数

  • x:要存储的R对象,可以是向量、矩阵、数据框
  • file:写入的文件名,不加路径名则存储在当前工作目录下(目录必须存在)
  • sep:指定新的分割符
    在这个过程中,会自动加入行号,若多次读入则会加若干次行号
    解决方法为:命令加一个row.names = false
  • append:将数据写入同一个文件(以免同名文件覆盖),设置为TRUE or FALSE
    (2)可直接写入压缩文件
> write.table(mtcars,gzfile("newfile.txt.gz"))

(3)借助foreign()

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 160,108评论 4 364
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,699评论 1 296
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,812评论 0 244
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,236评论 0 213
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,583评论 3 288
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,739评论 1 222
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,957评论 2 315
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,704评论 0 204
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,447评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,643评论 2 249
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,133评论 1 261
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,486评论 3 256
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,151评论 3 238
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,108评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,889评论 0 197
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,782评论 2 277
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,681评论 2 272

推荐阅读更多精彩内容