2017-11-06 2 views
0

CSV 파일을 읽으려고하고 있는데 다음 오류가 발생합니다. 내가 라인 1097 주위에이 행에서 휴식이고 연간 데이터 (I 지금은 매달에 관심)로 새로운 헤더를 시작하는 것을 알게 CSV 파일의 추가 검사 후지정된 값 범위에서 CSV에서 가져 오기

Error in scan(file = file, what = what, sep = sep, quote = quote, dec = dec, : 
    line 1097 did not have 5 elements 

.

temp <- tempfile() 
download.file("http://mba.tuck.dartmouth.edu/pages/faculty/ken.french/ftp/F-F_Research_Data_Factors_CSV.zip",temp, mode="wb") 
unzip(temp, "F-F_Research_Data_Factors.CSV") 
French <- read.table("F-F_Research_Data_Factors.CSV", sep=",", skip = 3, header=T, nrows = 100) 

위의 코드는 zip 파일을 다운로드하고 CSV가 완벽하게 작동 처음 100 개 행을 R로 파일을 가져옵니다. 그러나 첫 번째 100 행 (설명을 위해)은 1920 년대와 1930 년대의 데이터 포인트입니다. 특히 관심이있는 것은 아닙니다.

제 질문은 어떻게해야합니까? 첫 번째 쉼표로 구분 된 CSV 파일, 즉 192607 (1926-07)은 195007 (1950-07)까지입니다. - nrow = 1095를 변경하여 가장 최근 값을 가져올 수는 있지만 정확히 달성하려는 것은 아닙니다.

데이터의 스냅 샷;

,Mkt-RF,SMB,HML,RF 
192607, 2.96, -2.30, -2.87, 0.22 
192608, 2.64, -1.40, 4.19, 0.25 
192609, 0.36, -1.32, 0.01, 0.23 

... 라인 1100

Annual Factors: January-December 
,Mkt-RF,SMB,HML,RF 
    1927, 29.47, -2.46, -3.75, 3.12 
    1928, 35.39, 4.20, -6.15, 3.56 
+0

데이터를 검사하고 읽을 행을 찾을 수 있습니다. 즉, 1926-1950입니다. – CCurtis

답변

1

파일의 첫 번째 표는 그래서이 표시된 날짜를 전후 정크없이 읽어 후 서브 세트를 것 처음 두 길이가 제로 라인 사이 :

# read first table in file 
Lines <- readLines("F-F_Research_Data_Factors.CSV") 
ix <- which(Lines == "") 
DF0 <- read.csv(text = Lines[ix[1]:ix[2]]) # all rows in first table 

# subset it to indicated dates 
DF <- subset(DF0, X >= 192607 & X <= 195007) 

참고 : 모든 표를 원한다면 쉼표로 시작하는 줄이 각 표를 시작하고 빈 줄이 끝나고 (첫 번째 빈 줄이 표 앞에 오는 것을 제외하고) 위의 Lines을 사용하면 i 번째 구성 요소가 i 번째 표의 목록 인 목록 L이 표시됩니다. 파일.

st <- grep("^,", Lines) # starting line numbers 
en <- which(Lines == "")[-1] # ending line numbers 
L <- Map(function(st, en) read.csv(text = Lines[st:en]), st, en) 
+0

정확히 내가 고마워했던만큼 일했습니다! – user113156

2

내가 대신 read.table

French <- read.csv("F-F_Research_Data_Factors.CSV", sep = ",", skip = 3, 
header = T) 

read.csv을 사용하고 1188 개 관찰을 얻을. 여기에서 데이터 세트의 하위 집합을 만들 수 있다고 생각합니다.

+0

트릭을 수행하는 데 감사 드려요 – user113156

+0

@ user113156 도와 드리겠습니다. :) – Davidx

관련 문제