处理csv跳行
一次处理csv文件的时候,非常吃惊+卧槽的发现read.csv()
居然每跳一行处理一行数据。
导致最后读取出来的dataframe比实际少了一半。
也有人是就少了那几行。(总之就是数目不对)
解决方案:
用excel打开你的csv文件,全选所有内容,将常规
改为文本
,另存为,即可解决。
这个应该是csv的格式问题。
从前是常规的时候,用sublime打开是这个样子的——
"Receive_Time","Detected_Name","Device_ID"
" 2017/07/18 19:03:09","xxxx","xxx"
处理之后,打开是这个样子的——
Receive_Time,Detected_Name,Device_ID
2017/07/18 19:03:09,xxxx,xxx
但我觉得应该不单单只是改变了这个地方,否则read.csv()
中的quote
选项应该是能处理这个问题的。
解决方案2(2017/8/16更新)
发现可以尝试用这个方法来强行解决——
首先将quote设置为空,这样的话引入的文件的每个元素就会包含""
,但是行数就是完整的。
temp <- read.csv("data.csv" , header = TRUE, quote = "")
然后引入stringr
包来处理字符串。引入这个包的原因是R本身的string处理函数性能较差,会浪费很多不必要的时间,因为接下来要遍历data.frame中的每个元素。
library(stringr)
# 使用apply对temp表格的每个元素进行去除`"`的操作。
temp <- apply(temp,c(1,2),word, 2,sep = fixed("\""))
# 将它重新转化为data.frame
temp <- as.data.frame(temp)
好了搞定~不然要是文件数量一多,挨个挨个打开然后修改格式真的要死人啦TAT
批量处理文件
setwd("你的数据所在文件夹的路径")
files<-dir() # 获得文件夹里全部文件的列表
data <- data.frame() # 生成一个空dataframe
for ( i in files){ # 挨个遍历文件,并把文件整合到data这个data.frame中
temp <- read.csv(i)
names(temp)==names(data)
data <- rbind(data, temp)
}
出现<c7><U+0EA3>
如果出现此类UTF编码,检查下自己读文件的地方,是不是设置了encoding="UTF-8"
,而文件本身并不是UTF-8编码,所以造成了这个将汉字强行编码成UTF编码的问题。
引入代码时出现以下warning
> source("handle.R")
Error in source("./model/handleSingleLoc.R") :
invalid multibyte character in parser at line 10
In addition: Warning messages:
1: In grepl("\n", lines, fixed = TRUE) :
input string 10 is invalid in this locale
2: In grepl("\n", lines, fixed = TRUE) :
input string 12 is invalid in this locale
原因:
- 准备引入的.R文件和当前.R文件的编码不同。
- warning中写的10、12是你准备引入的R文件中有中文注释的行数,再加上编码问题,就导致该字符串无法被当前R文件的编码识别。
解决方案:
为了一口气解决所有文件的编码问题,我将两个文件都修改成了UTF-8
点击顶部工具栏中的file
,选择save with encoding...
,然后选择你想要的编码。
然后修改source()
代码为
source("handle.R", encoding = "UTF-8")
搞定。
告别factor
十次引入文件,九次不需要他默认把你的数据搞成factor格式的时候,直接在开头设置——
options(stringsAsFactors = FALSE)
「一键投喂 软糖/蛋糕/布丁/牛奶/冰阔乐!」
(๑>ڡ<)☆谢谢老板~
使用微信扫描二维码完成支付

本文由 左左薇拉 创作,采用 知识共享署名4.0 国际许可协议进行许可
本站文章除注明转载/出处外,均为本站原创或翻译,转载前请务必署名
最后编辑时间为: Sep 13, 2017 at 04:25 pm