Data input and output-R载入文件中的数据

问题

你想从文件中载入数据。

方案

带分隔符的文本文件

最简单的输入数据的方式就是将其保存为带分隔符(如:制表位或逗号)的文本文件。

data <- read.csv("datafile.csv")

# 导入一个没有表头的CSV文件
data <- read.csv("datafile-noheader.csv", header=FALSE)

函数read.table()是一个更为普遍的函数,允许你设置分隔符,不管是否有表头,不管字符串是否有引号,等等。使用?read.table查看更多详细信息。

data <- read.table("datafile-noheader.csv",
                   header=FALSE,
                   sep=","         # 制表位分隔的文件用"\t"
)

打开文件的文件选择器

某些平台,使用file.choose()可以打开文件选择的对话窗口;其他平台则会提示用户输入一个文件名。

data <- read.csv(file.choose())

把字符串看作因子(factor)或字符(character)

默认条件下,数据中的字符串都被转换为因子。如果你用read.csv()载入数据,所有的文本列都会被视为因子,即便它被处理为字符串更有意义。要这么做,使用 stringsAsFactors=FALSE:

data <- read.csv("datafile.csv", stringsAsFactors=FALSE)

# 将某一列转化为因子
data$Sex <- factor(data$Sex)

另一种将他们加载为因子,把某一列转换为字符的方法:

data <- read.csv("datafile.csv")

data$First <- as.character(data$First)
data$Last  <- as.character(data$Last)

# 另一种方法:转化名为“First”和“Last”的两列
stringcols <- c("First","Last")
data[stringcols] <- lapply(data[stringcols], as.character)

从网上导入文件

也可以从URL加载数据。这些(很长的)URL可以加载相关文件。

data <- read.csv("http://www.cookbook-r.com/Data_input_and_output/Loading_data_from_a_file/datafile.csv")


# 读取没有表头的CSV文件
data <- read.csv("http://www.cookbook-r.com/Data_input_and_output/Loading_data_from_a_file/datafile-noheader.csv", header=FALSE)

# 手动添加表头
names(data) <- c("First","Last","Sex","Number")

上述所使用的数据文件:

datafile.csv

"First","Last","Sex","Number"
"Currer","Bell","F",2
"Dr.","Seuss","M",49
"","Student",NA,21

datafile-noheader.csv:

"Currer","Bell","F",2
"Dr.","Seuss","M",49
"","Student",NA,21

定宽文本文件

假如你的数据列宽固定,如下例:

  First     Last  Sex Number
 Currer     Bell    F      2
    Dr.    Seuss    M     49
    ""   Student   NA     21

读取这种数据的一种方式是简单地使用read.table()函数strip.white=TRUE,可以清除额外的空格。

read.table("clipboard", header=TRUE, strip.white=TRUE)

然而,你的数据文件可能包含空间列,或列没有空格分开,这样,scores列表示六个不同的测量值,每一个从0到3。

subject  sex  scores
   N  1    M  113311
   NE 2    F  112231
   S  3    F  111221
   W  4    M  011002

这种情况,你可能需要使用read.fwf()函数。如果你读的列名来自于文件,它要求他们用分隔符(如:制表位,空格,逗号)分开。如果有多个空格分开将他们分开,如下例,你需要直接指定列的名称。

# 指定列的名称
read.fwf("myfile.txt", 
         c(7,5,-2,1,1,1,1,1,1), # 列的宽度,-2意味着放弃这些列
         skip=1,                # 跳过第一行(包括表头)
         col.names=c("subject","sex","s1","s2","s3","s4","s5","s6"),
         strip.white=TRUE)      # 跳过每个数据的前导和尾随
#>   subject sex s1 s2 s3 s4 s5 s6
#> 1    N  1   M  1  1  3  3  1  1
#> 2    NE 2   F  1  1  2  2  3  1
#> 3    S  3   F  1  1  1  2  2  1
#> 4    W  4   M  0  1  1  0  0  2
# subject sex s1 s2 s3 s4 s5 s6
#    N  1   M  1  1  3  3  1  1
#    NE 2   F  1  1  2  2  3  1
#    S  3   F  1  1  1  2  2  1
#    W  4   M  0  1  1  0  0  2

# 如果第一行如下:
# subject,sex,scores
# 我们可以使用header=TRUE
read.fwf("myfile.txt", c(7,5,-2,1,1,1,1,1,1), header=TRUE, strip.white=TRUE)
#> Error in read.table(file = FILE, header = header, sep = sep, row.names = row.names, : more columns than column names
# 错误:列比例名多

Excel文件

gdata包里的read.xls函数可以读取Excel文件。

library(gdata)
data <- read.xls("data.xls")

gdata包,见http://cran.r-project.org/doc/manuals/R-data.html#Reading-Excel-spreadsheets.

包的安装,见Basics-安装和使用R包

SPSS数据

foreign包里的read.spss函数可以读取SPSS文件。

library(foreign)
data <- read.spss("data.sav", to.data.frame=TRUE)

原文链接:http://www.cookbook-r.com/Data_input_and_output/Loading_data_from_a_file/

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

推荐阅读更多精彩内容