데이터 세트를 가져올 때 문제 :`Error in scan (…) : line 1 did not have 145 elements`
다음을 사용하여 R에서 데이터 세트를 가져 오려고합니다 read.table()
.
Dataset.df <- read.table("C:\\dataset.txt", header=TRUE)
하지만 다음과 같은 오류 메시지가 나타납니다.
Error in scan(file, what, nmax, sep, dec, quote, skip, nlines, na.strings, :
line 1 did not have 145 elements
이것은 무엇을 의미하며 어떻게 고칠 수 있습니까?
이 오류는 매우 자명합니다. 데이터 파일의 첫 번째 줄에 누락 된 데이터가있는 것 같습니다 (또는를 사용하고 있기 때문에 경우에 따라 두 번째 줄 header = TRUE
).
다음은 간단한 예입니다.
## Create a small dataset to play with
cat("V1 V2\nFirst 1 2\nSecond 2\nThird 3 8\n", file="test.txt")
R은 행 이름과 2 개의 열 (3 개의 요소)을 예상해야한다는 것을 자동으로 감지하지만 2 행에서 3 개의 요소를 찾지 못하므로 오류가 발생합니다.
read.table("test.txt", header = TRUE)
# Error in scan(file, what, nmax, sep, dec, quote, skip, nlines, na.strings, :
# line 2 did not have 3 elements
데이터 파일을보고 실제로 문제가 있는지 확인합니다.
cat(readLines("test.txt"), sep = "\n")
# V1 V2
# First 1 2
# Second 2
# Third 3 8
수동 수정이 필요하거나 "두 번째"행 행의 첫 번째 값이 첫 번째 열에 있어야하고 다른 값은이어야한다고 가정 할 수 있습니다 NA
. 이 경우 fill = TRUE
문제를 해결하기에 충분합니다.
read.table("test.txt", header = TRUE, fill = TRUE)
# V1 V2
# First 1 2
# Second 2 NA
# Third 3 8
R은 또한 행 이름이 누락 된 경우에도 필요한 요소 수를 파악할 수있을만큼 똑똑합니다.
cat("V1 V2\n1\n2 5\n3 8\n", file="test2.txt")
cat(readLines("test2.txt"), sep = "\n")
# V1 V2
# 1
# 2 5
# 3 8
read.table("test2.txt", header = TRUE)
# Error in scan(file, what, nmax, sep, dec, quote, skip, nlines, na.strings, :
# line 1 did not have 2 elements
read.table("test2.txt", header = TRUE, fill = TRUE)
# V1 V2
# 1 1 NA
# 2 2 5
# 3 3 8
이 오류가 발생하고 누락 된 데이터가없는 것으로 보이는 데이터 세트를 검토 할 때 일부 항목에 데이터 가져 오기를 방해하는 특수 문자 "#"이 있음을 발견했습니다. 문제가되는 셀에서 "#"을 제거하면 데이터를 문제없이 가져 왔습니다.
Add Health 데이터에서 R로 일부 파일을 가져 오는 동안이 문제가 발생했습니다 (참조 : http://www.icpsr.umich.edu/icpsrweb/ICPSR/studies/21600?archive=ICPSR&q=21600 ) 예를 들어, 탭으로 구분 된 .tsv 형식으로 DS12 데이터 파일을 읽으려면 다음 명령을 실행하면 다음 오류가 발생합니다.
ds12 <- read.table("21600-0012-Data.tsv", sep="\t", comment.char="",
quote = "\"", header=TRUE)
Error in scan(file, what, nmax, sep, dec, quote, skip, nlines,
na.strings, : line 2390 did not have 1851 elements
R이 파일을 거부하는 일부 파일에 약간의 서식 문제가있는 것 같습니다. 문제의 적어도 일부는 한 줄에 고르지 않은 수의 큰 따옴표 문자를 발생시키는 아포스트로피 대신 가끔씩 큰 따옴표를 사용하는 것으로 보입니다.
어슬렁 거리다가 세 가지 가능한 해결책을 찾았습니다.
Open the file in a text editor and search/replace all instances of a quote character " with nothing. In other words, delete all double quotes. For this tab-delimited data, this meant only that some verbatim excerpts of comments from subjects were no longer in quotes which was a non-issue for my data analysis.
With data stored on ICPSR (see link above) or other archives another solution is to download the data in a new format. A good option in this case is to download the Stata version of the DS12 and then open it using the read.dta command as follows:
library(foreign) ds12 <- read.dta("21600-0012-Data.dta")
A related solution/hack is to open the .tsv file in Excel and re-save it as a tab separated text file. This seems to clean up whatever formatting issue makes R unhappy.
None of these are ideal in that they don't quite solve the problem in R with the original .tsv file but data wrangling often requires the use of multiple programs and formats.
If you are using linux, and the data file is from windows. It probably because the character ^M Find it and delete. done!
For others who can't find a solution and know the data isn't missing elements:
I have this issue when I use Excel 2013 to save files as .csv and then try to load them in R using read.table(). The workaround I have found is to paste the data straight from Excel into a .txt document, then open with:
read.table(file.choose(), sep="\t").
I hope this helps.
I encountered this error when I had a row.names="id" (per the tutorial) with a column named "id".
Beside all the guidance mentioned above,you can also check all the data.
If there are blanks between words, you must replace them with "_"
.
However that how I solve my own problem.
Hash #
symbol creating this error, if you can remove the #
from the start of the column name, it could fix the problem.
Basically, when the column name starts with #
in between rows, read.table()
will recognise as a starting point for that row.
This simple method solved the problem for me: Copy the content of your dataset, open an empty Excel sheet, choose "Paste Special" -> "Values", and save. Import the new file instead.
(I tried all the existing solutions, and none worked for me. My old dataset appeared to have no missing values, space, special characters, or embedded formulas.)
One of my variables was categorical with one alternative being multi string ("no event"). When I used read.table, it assumed that the space after the first string meant the end of the data point and the second string was pushed to the next variable. I used sep= "\t" to solve the problem. I was using RStudio in a Mac OX environment. A previous solution was to transform .txt files to .csv in Excel, and afterwards open them with read.csv function.
ReferenceURL : https://stackoverflow.com/questions/18161009/issue-when-importing-dataset-error-in-scan-line-1-did-not-have-145-eleme
'programing' 카테고리의 다른 글
Rails 및 Devise의 강력한 매개 변수 (0) | 2021.01.14 |
---|---|
/ dir 및 / dir /과 같이 후행 슬래시가 있거나없는 .gitignore 규칙의 차이점 (0) | 2021.01.14 |
Xcode 5 앱 제출 문제 (0) | 2021.01.14 |
손상된 HDFS 파일을 수정하는 방법 (0) | 2021.01.14 |
JSON에 덤프는 추가 큰 따옴표와 따옴표 이스케이프를 추가합니다. (0) | 2021.01.14 |