R-基础篇

参考文章

一、数据的导入与导出

1.数据的导入

在R语言中,常常用到导入数据的源文件是Excel文件,CSV文件,文本文件等等。

R中有关数据读入的函数包括:read.csv(),read.delim(),read.delim2(),read.table(),data.table::fread() (双冒号表示的是data.table包中的fread()函数)。

(1) 导入csv文件

适用于导入Excel数据,但需要先将Excel数据转化为csv格式。CSV是(逗号分隔值)的英文缩写,通常都是纯文本文件。
导入格式:

mydataframe<read.table(file,header=logical_value,ep="delimiter",row.names="name")
file:csv文件
header:逻辑值,首先是否包括变量名
sep:分隔符
row.names:指定一个或多个表示行标识符的变量
grades<-read.table("studentgrades.csv",header=TRUE,sep=",",row.names="STUDENTID")

表示从当前目录中读取一个名为studentgrades.csv的逗号分隔文件,从文件的第一行取得变量名字,将STUDENTID指定为行标识符,整个结果保存到grades的数据框中。

read.delim和read.delim2,这两个函数可以分别使用句号逗号作为小数位来导入制表符分隔的文件。

(2) 导入文本文件

一般采用read.table()函数和read.csv()函数实现文本文件数据的读取,对于这两个函数有几个重要的参数:

1.file指定外部文件的路径和文件名;
2.header指定是否将原数据的第一行最为字段名,read.table()函数默认设置为FALSE,而read.csv()函数默认设置为TRUE;
3.sep指定字段之间的分割符,read.table()函数默认设置为空格””,而read.csv()函数默认设置为逗号;
4.除此,read.table()函数还可以设置读入数据集的行名、列名、字符串是否转换为因子、缺失值的形式等,详细可查看read.table()函数的帮助文档。

(3) 导入剪切板中的数据

通常情况下就是在Excel中复制,接着输入以下命令就可以导入数据。
导入格式:

data <- read.table("clipboard", header = T, sep="\t")

(4) 从scan导入数据

主要用于键盘输入数据。

scan() 函数
scan(file = "", what = double(0), nmax = -1, n = -1, sep = "",
     quote = if(identical(sep, "\n")) "" else "'\"", dec = ".",
     skip = 0, nlines = 0, na.strings = "NA",
     flush = FALSE, fill = FALSE, strip.white = FALSE,
     quiet = FALSE, blank.lines.skip = TRUE, multi.line = TRUE,
     comment.char = "", allowEscapes = FALSE, encoding = "unknown")

说明:
1.what:声明读入为字符类型数据,可能指定读入的精度/类型,
例如:what=integer(0);what=numeric(0);what=character(0);
如果SCAN()读入有字符与数字,用what=””来进行声明,则会把读入的数字隐式的都转变成字符;
2.sep:指定各个读入的数据之间的分隔符;默认情况下分隔符:空格、tab;如果不是其它分隔符,
例如“:/”通过SEP来指定;
3.可以通过list指定读入变量的变量名,同时生成的对象为列表,则可以同时读入字符与数字;
4.Skip 从第几行开始读入数据;
5.Nlines 指定最大读入行数;
6.如果通过键盘输入的时候,不希望出现下标提示,则可以使用:quiet=TRUE;
7.encoding =””指定的编码格式,有时候读入的中文可能会出现乱码的时候,可能通过这个参数来指定:Latin-1 或者 UTF-8

(5) 使用表格输入数据

mydata<-data.frame(age=numeric(0),
                   gender=character(0),
                   weight=numeric(0))
mydata<-edit(mydata)

创建一个名为mydata的数据框,含三个变量,age为数据型,gender为字符型,weight为数值型。edit调用文本编辑器,键入数据。
其中numeric(0)创建一个指定模型但不含实际数据的变量。如果再次调用mydata<-edit(mydata)能够用来修改数据,或者使用fix(mydata)也行。

(6) 使用readxl包来读取excel文件

readxl包中的几个函数可以读取excel文件,主要有read_excel,read_xls,read_xlsx。其中各个函数的参数如下所示:

read_excel(path, sheet = NULL, range = NULL, col_names = TRUE,
  col_types = NULL, na = "", trim_ws = TRUE, skip = 0,
  n_max = Inf, guess_max = min(1000, n_max),
  progress = readxl_progress(), .name_repair = "unique")
read_xls(path, sheet = NULL, range = NULL, col_names = TRUE,
  col_types = NULL, na = "", trim_ws = TRUE, skip = 0,
  n_max = Inf, guess_max = min(1000, n_max),
  progress = readxl_progress(), .name_repair = "unique")
read_xlsx(path, sheet = NULL, range = NULL, col_names = TRUE,
  col_types = NULL, na = "", trim_ws = TRUE, skip = 0,
  n_max = Inf, guess_max = min(1000, n_max),
  progress = readxl_progress(), .name_repair = "unique")

说明:
1.path:xls/xlsx文件的路径
2.sheet: Excel文件中Sheet的参数,可以是一个字符串,也就是sheet的名称,可以是一个整数,它表示sheet的位置。如果不输入这个参数,默认输入第1个sheet的数据。
3.range: sheet中单元格的范围,例如range=B2:G14。也可以指定某个sheet,例如range="mtcars!B1:D5"。
4.col_names: TRUE 使用第一行作为行名,FALSE 使用默认的名字,或者是使用一个字符串或字符串向量来表示第一行的名称。

(7)批量读取文件

读取N个Excel文件,并将这N个Excel文件进行合并,分为四种情况,导入格式如下所示,其中read_excel函数所在的包为readxl。

setwd('D:\\data file\\data1') 
# 设置R的工作空间
#res <- NULL
data1 <- data.frame()
# 初始化数据框,用于后面的数据合并
#通过循环完成数据合并
for (i in 1:4){
path <- paste0(getwd(),'\\','test',i,'.xlsx')   # 构造数据路径
res <- c(res,path)
data1 <- rbind(data1,read_excel(path = path))   # 读取并合并数据
}

在文件没有规律的情况,导入格式如下:

setwd('D:\\data file\\data2')  # 设置工作空间
filenames <- dir()   # 读取该工作空间下的所有文件名
data2 <- data.frame()   # 初始化数据框,用于后面的数据合并
#通过循环完成数据合并
for (i in filenames){
# 构造数据路径
path <- paste0(getwd(),'\\',i)
#res <- c(res,path)
# 读取并合并数据
data2 <- rbind(data2,read_excel(path = path))
}

2.数据的导出

导出格式:

 a
[1]  1  2  4 NA  5  4
> b
[1] "a" "b" "c" "d" NA  "4"
 c <- data.frame(a,b)
 c
   a    b
1  1    a
2  2    b
3  4    c
4 NA    d
5  5 <NA>
6  4    4
write.table(c,file = "c:\\data.txt",sep = ",",quote = FALSE, append = FALSE, na = "NA")
write.table(c,file = "c:\\data.csv",sep = ",",quote = FALSE, append = FALSE, na = "NA")

说明:
c为导出的数据,file为导出的路径,sep = “,”表示用逗号隔开数据,quote = FALSE表示消除字符串的引号标志,append = FALSE打开一个新文件,如果为TRUE则表示将此数据追加到已经存在的文件中,na=”NA”表示用NA来代表na值。

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

推荐阅读更多精彩内容