• 初学者使用R语言读取excel/csv/txt的注意事项



    本文首发于:医学和生信笔记,完美观看体验请至公众号查看本文。


    本文面向R语言初学者,尤其是生物医药领域的初学者,大佬勿喷~

    在之前的推文中,我们用两个视频详细介绍了R语言、rtools、Rstudio以及R包的安装,解决新手最先碰到的两大难题!

    接下来大家就面临把数据读入R语言、把数据另存为其他格式的问题!

    大家在日常生活中遇到的最多的数据应该还是Excel数据,但是对于R语言来说,我们必须要把外部数据读入到R里面,才能进行各种操作。对于我们最后的数据,可能还需要再保存为excel格式。

    这两个问题对于会的人来说非常简单,可以有多种方法可以实现,但是对于新手来说却经常遇到报错。今天从一个新手的角度说一说R语言的数据读入和另存问题。

    把数据读入R语言

    Excel

    这个格式太常见了,大家日常生活用的大部分都是这种格式。比如有这么一个excel文件:data.xlsx,它里面的内容是这样的:
    示例excel

    现在我们需要把它读入R里面。我推荐你使用readxl包读取Excel文件。首先我们要安装这个R包,如果你还不会R包安装常见的4种方式,赶紧去看这个视频:xxxxxxxxxxxxx。

    install.packages("readxl")
    
    • 1

    安装好之后,我们需要加载这个R包才能使用:

    library(readxl)
    
    • 1

    然后我们就可以读入这个文件了,读取时,你必须指明你的文件在哪里! 如果文件路径没写对,就会出现下面这种类似的报错,一般情况下,它会告诉你,你的路径没写对,或者找不到这个文件,这个文件不存在,不能打开连接等等错误!!

    tmp <- read_xlsx("E:/data.xlsx", col_names = T)
    
    ## Error: `path` does not exist: ‘E:/R/data.xlsx’
    
    • 1
    • 2
    • 3

    这个时候你就要去确认下,你的这个data.xlsx文件到底在哪里!当你给它正确的路径时,它就不会报错。还要注意/ \ , " ",这些标点一定要在英文状态下输入!

    tmp <- read_xlsx("E:/R/data.xlsx", col_names = T)
    
    tmp
    ## # A tibble: 29 × 6
    ##     编号 治疗方式 性别   年龄 收缩压  血糖
    ##             
    ##  1     1 方法1    男       56    134   6.3
    ##  2     2 方法2    女       45    123   4.6
    ##  3     3 方法3    男       67    112   7.4
    ##  4     4 方法4    女       56    113   8.5
    ##  5     5 方法5    男       78    115   6.3
    ##  6     6 方法6    女       56    116   4.6
    ##  7     7 方法7    男       67    134   7.4
    ##  8     8 方法8    女       45    123   8.5
    ##  9     9 方法9    男       67    112   6.3
    ## 10    10 方法10   女       87    113   4.6
    ## # … with 19 more rows
    ## # ℹ Use `print(n = ...)` to see more rows
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    这样我们就成功把文件读取到R里面了!

    除了路径问题,对于新手还有几个点需要注意:

    • 这个示例文件是有列名的,所以在读取的时候加了col_names=T这个参数,没有行名就要改成F
    • 如果你的数据使用了合并/拆分单元格、各种格式、公式等,会报错!
    • 这个文件是.xlsx格式的,如果不是,那你需要用其他函数,比如read_xls()函数读取.xls结尾的文件;
    • 如果你读取中文遇到乱码问题,那大概率是遇到了编码问题,这是一个很复杂的问题:
      • 首先你可以通过点击rstudio中的Tools - Global Options,到达以下界面,把默认编码方式改为utf-8,然后关闭rstudio,重新读取;
        [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0LkHBpNt-1668216404004)(C:\Users\liyue\Desktop\Snipaste_2022-07-31_19-13-14.png)]
      • 有时直接升级R包/R/rstudio/,重新保存文件为utf-8等方式也可以解决问题;
      • 如果都不行,直接百度!具体情况具体分析!

    csv

    csv文件是一种逗号分隔文件,打开后和excel看起来一模一样,你不要问为什么看不到逗号…
    csv文件

    一般推荐把excel文件另存为csv文件,因为方便R语言读取,不需要安装R包也可以读取~

    csv <- read.csv("E:/R/data.csv", header = T)
    
    csv
    ##    编号 治疗方式 性别 年龄 收缩压 血糖
    ## 1     1    方法1   男   56    134  6.3
    ## 2     2    方法2   女   45    123  4.6
    ## 3     3    方法3   男   67    112  7.4
    ## 4     4    方法4   女   56    113  8.5
    ## 5     5    方法5   男   78    115  6.3
    ## 6     6    方法6   女   56    116  4.6
    ## 7     7    方法7   男   67    134  7.4
    ## 8     8    方法8   女   45    123  8.5
    ## 9     9    方法9   男   67    112  6.3
    ## 10   10   方法10   女   87    113  4.6
    ## 11   11   方法11   男   56    115  7.4
    ## 12   12   方法12   女   78    116  8.5
    ## 13   13   方法13   男   67    134  6.3
    ## 14   14   方法14   女   56    123  4.6
    ## 15   15   方法15   男   78    112  7.4
    ## 16   16   方法16   女   56    113  8.5
    ## 17   17   方法17   男   45    115  6.3
    ## 18   18   方法18   女   67    116  4.6
    ## 19   19   方法19   男   56    134  7.4
    ## 20   20   方法20   女   78    123  8.5
    ## 21   21   方法21   男   56    112  6.3
    ## 22   22   方法22   女   67    113  4.6
    ## 23   23   方法23   男   45    115  7.4
    ## 24   24   方法24   女   67    116  8.5
    ## 25   25   方法25   男   87    134  6.3
    ## 26   26   方法26   女   56    123  4.6
    ## 27   27   方法27   男   78    112  7.4
    ## 28   28   方法28   女   67    113  8.5
    ## 29   29   方法29   男   56    115  6.3
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33

    或者用read.table()函数读取。

    csv <- read.table("E:/R/data.csv", header = T,
                      sep = "," # 指定分隔符!!
                      )
    
    csv
    ##    编号 治疗方式 性别 年龄 收缩压 血糖
    ## 1     1    方法1   男   56    134  6.3
    ## 2     2    方法2   女   45    123  4.6
    ## 3     3    方法3   男   67    112  7.4
    ## 4     4    方法4   女   56    113  8.5
    ## 5     5    方法5   男   78    115  6.3
    ## 6     6    方法6   女   56    116  4.6
    ## 7     7    方法7   男   67    134  7.4
    ## 8     8    方法8   女   45    123  8.5
    ## 9     9    方法9   男   67    112  6.3
    ## 10   10   方法10   女   87    113  4.6
    ## 11   11   方法11   男   56    115  7.4
    ## 12   12   方法12   女   78    116  8.5
    ## 13   13   方法13   男   67    134  6.3
    ## 14   14   方法14   女   56    123  4.6
    ## 15   15   方法15   男   78    112  7.4
    ## 16   16   方法16   女   56    113  8.5
    ## 17   17   方法17   男   45    115  6.3
    ## 18   18   方法18   女   67    116  4.6
    ## 19   19   方法19   男   56    134  7.4
    ## 20   20   方法20   女   78    123  8.5
    ## 21   21   方法21   男   56    112  6.3
    ## 22   22   方法22   女   67    113  4.6
    ## 23   23   方法23   男   45    115  7.4
    ## 24   24   方法24   女   67    116  8.5
    ## 25   25   方法25   男   87    134  6.3
    ## 26   26   方法26   女   56    123  4.6
    ## 27   27   方法27   男   78    112  7.4
    ## 28   28   方法28   女   67    113  8.5
    ## 29   29   方法29   男   56    115  6.3
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35

    是不是很简单,注意点和excel一样~

    txt

    txt文件也是我们常见的文件类型,通常这种数据也是可以直接读取的,不同安装R包。

    现在我们有一个这样的txt文件,它可能看起来不规整,但其实是规整的哦~~,不要被表象迷惑,也千万不要试图用空格键把它对齐!!
    txt文件

    txt是tab键分隔的文件,在读取时,一定要指定分隔符:

    tmp <- read.table("tmp.txt",sep = "\t", # 必须要指定分隔符
                      header = T)
    tmp
    ##    编号 治疗方式 性别 年龄 收缩压 血糖
    ## 1     1    方法1   男   56    134  6.3
    ## 2     2    方法2   女   45    123  4.6
    ## 3     3    方法3   男   67    112  7.4
    ## 4     4    方法4   女   56    113  8.5
    ## 5     5    方法5   男   78    115  6.3
    ## 6     6    方法6   女   56    116  4.6
    ## 7     7    方法7   男   67    134  7.4
    ## 8     8    方法8   女   45    123  8.5
    ## 9     9    方法9   男   67    112  6.3
    ## 10   10   方法10   女   87    113  4.6
    ## 11   11   方法11   男   56    115  7.4
    ## 12   12   方法12   女   78    116  8.5
    ## 13   13   方法13   男   67    134  6.3
    ## 14   14   方法14   女   56    123  4.6
    ## 15   15   方法15   男   78    112  7.4
    ## 16   16   方法16   女   56    113  8.5
    ## 17   17   方法17   男   45    115  6.3
    ## 18   18   方法18   女   67    116  4.6
    ## 19   19   方法19   男   56    134  7.4
    ## 20   20   方法20   女   78    123  8.5
    ## 21   21   方法21   男   56    112  6.3
    ## 22   22   方法22   女   67    113  4.6
    ## 23   23   方法23   男   45    115  7.4
    ## 24   24   方法24   女   67    116  8.5
    ## 25   25   方法25   男   87    134  6.3
    ## 26   26   方法26   女   56    123  4.6
    ## 27   27   方法27   男   78    112  7.4
    ## 28   28   方法28   女   67    113  8.5
    ## 29   29   方法29   男   56    115  6.3
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33

    其他

    如果是spss软件产生的.sav文件,可以使用foreign包中的read.spss()函数读取,或者使用haven包中的read_sav()

    这两个包在使用前需要先安装哦~

    # foreign包读取
    library(foreign)
    spss <- foreign::read.spss("例03-05.sav",to.data.frame = T)
    
    spss
    ##    no  hb
    ## 1   1 112
    ## 2   2 137
    ## 3   3 129
    ## 4   4 126
    ## 5   5  88
    ## 6   6  90
    ## 7   7 105
    ## 8   8 178
    ## 9   9 130
    ## 10 10 128
    ## 11 11 126
    ## 12 12 103
    ## 13 13 172
    ## 14 14 116
    ## 15 15 125
    ## 16 16  90
    ## 17 17  96
    ## 18 18 162
    ## 19 19 157
    ## 20 20 151
    ## 21 21 135
    ## 22 22 113
    ## 23 23 175
    ## 24 24 129
    ## 25 25 165
    ## 26 26 171
    ## 27 27 128
    ## 28 28 128
    ## 29 29 160
    ## 30 30 110
    ## 31 31 140
    ## 32 32 163
    ## 33 33 100
    ## 34 34 129
    ## 35 35 116
    ## 36 36 127
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    # haven包读取
    library(haven)
    spss <- read_sav("例03-05.sav")
    
    spss
    ## # A tibble: 36 × 2
    ##       no    hb
    ##     
    ##  1     1   112
    ##  2     2   137
    ##  3     3   129
    ##  4     4   126
    ##  5     5    88
    ##  6     6    90
    ##  7     7   105
    ##  8     8   178
    ##  9     9   130
    ## 10    10   128
    ## # … with 26 more rows
    ## # ℹ Use `print(n = ...)` to see more rows
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    这个例子是比较简单的,有时候需要指定特定的编码方式,可以通过使用?read_sav/?read.spss查看更改编码的方式。

    haven这个包是专门设计用来读取spss/SAS/STATA格式的文件的~

    如果是rdata/Rdata/RData文件,这个是R自带的格式,直接load()即可,但是要注意一定要写对文件路径!! 或者也可以直接双击rdata/Rdata/RData文件!

    load(file = "tmp.rdata")
    tmp
    ##    编号 治疗方式 性别 年龄 收缩压 血糖
    ## 1     1    方法1   男   56    134  6.3
    ## 2     2    方法2   女   45    123  4.6
    ## 3     3    方法3   男   67    112  7.4
    ## 4     4    方法4   女   56    113  8.5
    ## 5     5    方法5   男   78    115  6.3
    ## 6     6    方法6   女   56    116  4.6
    ## 7     7    方法7   男   67    134  7.4
    ## 8     8    方法8   女   45    123  8.5
    ## 9     9    方法9   男   67    112  6.3
    ## 10   10   方法10   女   87    113  4.6
    ## 11   11   方法11   男   56    115  7.4
    ## 12   12   方法12   女   78    116  8.5
    ## 13   13   方法13   男   67    134  6.3
    ## 14   14   方法14   女   56    123  4.6
    ## 15   15   方法15   男   78    112  7.4
    ## 16   16   方法16   女   56    113  8.5
    ## 17   17   方法17   男   45    115  6.3
    ## 18   18   方法18   女   67    116  4.6
    ## 19   19   方法19   男   56    134  7.4
    ## 20   20   方法20   女   78    123  8.5
    ## 21   21   方法21   男   56    112  6.3
    ## 22   22   方法22   女   67    113  4.6
    ## 23   23   方法23   男   45    115  7.4
    ## 24   24   方法24   女   67    116  8.5
    ## 25   25   方法25   男   87    134  6.3
    ## 26   26   方法26   女   56    123  4.6
    ## 27   27   方法27   男   78    112  7.4
    ## 28   28   方法28   女   67    113  8.5
    ## 29   29   方法29   男   56    115  6.3
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32

    如果是rds文件,这个也是R常用的格式,使用readRDS()函数即可,也要注意文件路径

    tmp <- readRDS(file = "tmp.rds") 
    tmp
    ##    编号 治疗方式 性别 年龄 收缩压 血糖
    ## 1     1    方法1   男   56    134  6.3
    ## 2     2    方法2   女   45    123  4.6
    ## 3     3    方法3   男   67    112  7.4
    ## 4     4    方法4   女   56    113  8.5
    ## 5     5    方法5   男   78    115  6.3
    ## 6     6    方法6   女   56    116  4.6
    ## 7     7    方法7   男   67    134  7.4
    ## 8     8    方法8   女   45    123  8.5
    ## 9     9    方法9   男   67    112  6.3
    ## 10   10   方法10   女   87    113  4.6
    ## 11   11   方法11   男   56    115  7.4
    ## 12   12   方法12   女   78    116  8.5
    ## 13   13   方法13   男   67    134  6.3
    ## 14   14   方法14   女   56    123  4.6
    ## 15   15   方法15   男   78    112  7.4
    ## 16   16   方法16   女   56    113  8.5
    ## 17   17   方法17   男   45    115  6.3
    ## 18   18   方法18   女   67    116  4.6
    ## 19   19   方法19   男   56    134  7.4
    ## 20   20   方法20   女   78    123  8.5
    ## 21   21   方法21   男   56    112  6.3
    ## 22   22   方法22   女   67    113  4.6
    ## 23   23   方法23   男   45    115  7.4
    ## 24   24   方法24   女   67    116  8.5
    ## 25   25   方法25   男   87    134  6.3
    ## 26   26   方法26   女   56    123  4.6
    ## 27   27   方法27   男   78    112  7.4
    ## 28   28   方法28   女   67    113  8.5
    ## 29   29   方法29   男   56    115  6.3
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32

    常见的就是这些,当你掌握这些简单的之后,你可以尝试更加复杂的,以后肯定也会遇到,不过有了这些简单的作为基础,相信你能更快的解决这类问题~

    写出文件(从R语言另存为其他格式)

    写出文件我觉得比读取文件要简单一点,如果你实在不知道怎么保存,有个简便方法,在这个地方:
    一键保存所有

    直接点击保存,就会在你当前工作目录产生一个RData文件,下次直接load或者双击即可快速打开你的所有东西!!!

    不太推荐直接保存为excel格式,建议使用csv格式。

    如果是想把当前文件保存为csv文件,可以使用以下函数:

    # 把tmp这个数据框保存为csv
    write.csv(tmp, # 要保存的对象
              file = "D:/111.csv", # 保存到哪里,保存为什么格式,.csv不要忘记!
              quote = F, # 不加引号
              row.names = F, # 行名
              col.names = T # 列名
              )
    
    write.table(tmp,
                file = "D:/111.csv", # 保存到哪里,保存为什么格式,.csv不要忘记!
                sep = ",",  # 必须指定分隔符!!!
                quote = F, # 不加引号
                row.names = F, # 行名
                col.names = T # 列名
                )
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    如果要保存为或者txt文件,可以使用以下函数:

    write.table(tmp,
                file = "D:/222.txt",
                sep = "\t", # 千万别忘记指定分隔符!!
                quote = F, # 不加引号
                row.names = F, # 行名
                col.names = T # 列名
                )
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    如果要保存为rdata/Rdata/RData文件,直接用save()函数,简单方便,下次直接load即可,还可以同时保存多个对象!!

    推荐大家平时保存时选择rdata/Rdata/RData/rds,方便,官方!

    save(tmp,csv, # 同时保存多个对象
         file = "tmp1.rdata")
    
    • 1
    • 2

    保存为rds格式:

    saveRDS(tmp, file = "tmp.rds")
    
    • 1

    以上就是常见的数据读取和写出,最后再说一遍注意点:

    • 输入法需要是英文状态下的标点符号!
    • 文件路径必须写对!
    • 注意不同文件的分隔符!
    • 不同文件使用不同函数读取/写出!不要所有的格式都用一个!
    • 如果碰到不知道的格式读取,直接百度!!99.999%能解决你的问题!

    希望大家以后再也不要碰到数据读取问题!


    本文首发于:医学和生信笔记,完美观看体验请至公众号查看本文。


  • 相关阅读:
    Vue项目实战——实现GitHub搜索案例(学以致用,两小时带你巩固和强化Vue知识点)
    java基础—String
    【千锋Python2205班10.20笔记-day04-接口和常见反爬(一阶段)】
    论文网站有哪些?
    ASEMI肖特基二极管SB30100LCT图片,SB30100LCT应用
    [centos]centos7源码编译cmake报错Could NOT find OpenSSL
    驱动开发:内核扫描SSDT挂钩状态
    【实用】Linux系统知识小汇
    百度API:通用文字识别(标准含位置版)c#
    ruoyi-nbcio-plus基于vue3的flowable修正加签与跳转的前端问题
  • 原文地址:https://blog.csdn.net/Ayue0616/article/details/127816369