将.csv
文件导入R时出现问题。我的代码为:
t <- read.csv("C:\\N0_07312014.CSV", na.string=c("","null","NaN","X"),
header=T, stringsAsFactors=FALSE,check.names=F)
R报告错误但没有按我的意愿行事:
Error in read.table(file = file, header = header, sep = sep, quote = quote, :
more columns than column names
我想问题是因为我的数据格式不正确。我只需要来自[,1:32]
的数据。应删除所有其他内容。
可从以下网址下载数据: https://drive.google.com/file/d/0B86_a8ltyoL3VXJYM3NVdmNPMUU/edit?usp=sharing
非常感谢!
答案 0 :(得分:7)
这是一个奇怪的CSV文件。多个标题被抛出(尝试将其粘贴到CSV Fingerprint)以查看我的意思。
由于我不知道数据,因此无法确定以下内容是否能为您生成准确的结果,但它涉及使用readLines
和其他R函数预处理文本:
# use readLines to get the data
dat <- readLines("N0_07312014.CSV")
# i had to do this to fix grep errors
Sys.setlocale('LC_ALL','C')
# filter out the repeating, and wonky headers
dat_2 <- grep("Node Name,RTC_date", dat, invert=TRUE, value=TRUE)
# turn that vector into a text connection for read.csv
dat_3 <- read.csv(textConnection(paste0(dat_2, collapse="\n")),
header=FALSE, stringsAsFactors=FALSE)
str(dat_3)
## 'data.frame': 308 obs. of 37 variables:
## $ V1 : chr "Node 0" "Node 0" "Node 0" "Node 0" ...
## $ V2 : chr "07/31/2014" "07/31/2014" "07/31/2014" "07/31/2014" ...
## $ V3 : chr "08:58:18" "08:59:22" "08:59:37" "09:00:06" ...
## $ V4 : chr "" "" "" "" ...
## .. more
## $ V36: chr "" "" "" "" ...
## $ V37: chr "0" "0" "0" "0" ...
# grab the headers
headers <- strsplit(dat[1], ",")[[1]]
# how many of them are there?
length(headers)
## [1] 32
# limit it to the 32 columns you want (Which matches)
dat_4 <- dat_3[,1:32]
# and add the headers
colnames(dat_4) <- headers
str(dat_4)
## 'data.frame': 308 obs. of 32 variables:
## $ Node Name : chr "Node 0" "Node 0" "Node 0" "Node 0" ...
## $ RTC_date : chr "07/31/2014" "07/31/2014" "07/31/2014" "07/31/2014" ...
## $ RTC_time : chr "08:58:18" "08:59:22" "08:59:37" "09:00:06" ...
## $ N1 Bat (VDC) : chr "" "" "" "" ...
## $ N1 Shinyei (ug/m3): chr "" "" "0.23" "null" ...
## $ N1 CC (ppb) : chr "" "" "null" "null" ...
## $ N1 Aeroq (ppm) : chr "" "" "null" "null" ...
## ... continues
答案 1 :(得分:4)
如果您只需要前32列,并且知道有多少列,则可以将其他列类设置为NULL。
read.csv("C:\\N0_07312014.CSV", na.string=c("","null","NaN","X"),
header=T, stringsAsFactors=FALSE,
colClasses=c(rep("character",32),rep("NULL",10)))
如果您不想编写每个colClass并且您喜欢猜测read.csv
,那么只需保存该csv并再次打开它。
或者,您可以跳过标题并自己命名列并删除行为不当的行。
A<-data.frame(read.csv("N0_07312014.CSV",
header=F,stringsAsFactors=FALSE,
colClasses=c(rep("character",32),rep("NULL",5)),
na.string=c("","null","NaN","X")))
Yournames<-as.character(A[1,])
names(A)<-Yournames
yourdata<-unique(A)[-1,]
上面的代码假设您不需要任何重复的行。您也可以删除第一个条目等于第一个列名称的行,但我会留给您。
答案 2 :(得分:2)
将.csv作为文本文件打开(例如,在Mac上使用TextEdit)并检查列是否以逗号分隔。
csv是&#34;逗号分隔的矢量&#34;。出于某种原因,当Excel保存我的csv时,它会使用分号代替。
打开csv时使用:
read.csv("file_name.csv",sep=";")
半结肠只是一个例子,但正如其他人之前建议的那样,不要认为因为你的csv在Excel中看起来不错,所以也是如此。
答案 3 :(得分:1)
尝试read.table()而不是read.csv()
答案 4 :(得分:0)
我也面临着同样的问题。现在解决了。
只需使用header = FALSE
read.csv("data.csv", header = FALSE) -> mydata
答案 5 :(得分:0)
我遇到了同样的问题。我在文本文件中打开我的数据,双表达式用分号分隔,你应该用句点替换它们