读取含多行观测值的制表符分隔文件的问题及解决方法
解决
scan()读取含引号的制表符分隔数据问题 看起来你在读取那份房产相关的制表符分隔文本时遇到了字段错位的问题吧?大概率是数据里存在带引号的内容,比如地址字段里可能有包含引号的描述,导致scan()没办法正确识别字段边界。
你之前的代码是这样的:
land <- as.data.frame(scan(paste0(dirdata, "land.txt" ),what=list(CFullName="", CAddr1= "", CAddr2="", Amount="",CDate= "", Financer= "", Filing="", Sched= "", Office="", Dist= "", County= "", Municipality= ""), sep = "\t" , flush = TRUE, multi.line=TRUE, skip= 20, na.strings = "NA"))
解决方法很简单——只需要在scan()函数里加上quote参数,明确指定数据中使用的引号类型就行。如果你的数据里用的是双引号,就设置quote = "\"";如果是单引号,就用quote = "'";要是两种引号都有,也可以写成quote = c("'", "\"")。
修改后的代码如下:
land <- as.data.frame(scan(paste0(dirdata, "land.txt" ), what = list(CFullName = "", CAddr1 = "", CAddr2 = "", Amount = "", CDate = "", Financer = "", Filing = "", Sched = "", Office = "", Dist = "", County = "", Municipality = ""), sep = "\t", flush = TRUE, multi.line = TRUE, skip = 20, na.strings = "NA", quote = "\"")) # 这里指定双引号为字段引用符,可根据你的实际数据调整
加上这个参数后,scan()就会把引号包裹的内容当成完整的单个字段处理,不会因为里面的特殊字符(比如制表符、换行)而错误分割字段啦。
内容的提问来源于stack exchange,提问作者regents
相关产品推荐
相关产品推荐

