안녕하세요. NSE Bhavcopy에서 다운로드 한 CSV를 병합 중입니다. 다른 날짜에는 cols의 다른 no가있다. 26-12-2006에 998 개의 행이 있다고 말하십시오. & 27-12-2006 행에는 1003 개의 행이 있습니다. 그것에는 8 개의 cols가있다. 나는 단지 2 cols, Symbol, close price와 함께 & b를 만드는 cbind를한다. 병합을 위해 SYMBOL로 병합 할 수 있도록 colnames를 사용하여 col의 이름을 지정합니다.여러 csv를 R에 합치는 것
질문 :
1) 내가 "기호"= 함수에 의해 병합 사용 모든 = F; 나는 결과가 1011 행을 갖는 것을보고 놀랐다. 내가 읽은 곳은 모두 = 998 행 또는 최대 1003 행이되어야 합니다. 나는 또한 자료를 분석하고 27-12-2006에서 5 개의 다른 상징이다는 것을 것을을 발견했다 & 26-12-2006에서 3 개의 다른 상징. 그래서 "SYMBOL"로 병합하면 두 줄의 새로운 기호가 추가됩니까? 또는 이전의 기존 행과 만 병합됩니까?
2) NSEmerg는 &이 기존 c 파일과 병합 할 때마다 for 루프를 사용하여 새 파일을 읽는 함수입니다. 나는 2006 년 12 월에서 2013 년 4 월까지의 데이터를 가지고있는 약 1535 개의 파일을 가지고있다. 그러나 12 메가 바이트의 오류 벡터 크기를 허용하므로 12 개 이상의 파일을 병합 할 수 없었다. 또한 1535MB의 메모리 할당이 모두 사용되었다는 경고 메시지가 표시됩니다. 또한 12 번째 파일에서 나는 c의 nrow가 1508095라는 루프가 무한히 실행되는 루프임을 암시합니다. 모든 1535 개의 파일 중 가장 높은 행은 1435에있었습니다. 특정 날짜에 상장되지 않은 모든 주식을 추가하더라도 2200 개의 주식을 교차시키지 않을 수도 있습니다. 왜 이것이 1.5 백만의 nrow를 보여 줍니까 ??
3) CSV를 병합하는 더 좋은 방법이 있습니까? 나는 스택 오버플로에 처음으로 다른 사람이 10 개 파일을 첨부했을 것이다.
코드 :
a <- read.csv("C://Users/home/desktop/061226.csv", stringsAsFactors = F, header = T)
b <- read.csv("C://Users/home/desktop/061227.csv", stringsAsFactors = F, header = T)
a_date <- a[2,1]
b_date <- b[2,1]
a <- cbind(a[,2],a[,6])
b <- cbind(b[,2], b[,6])
colnames(a) <- c("SYMBOL", a_date)
colnames(b) <- c("SYMBOL", b_date)
c <- merge(a,b,by = "SYMBOL", all = F)
NSEmerg <- function(x,y) {
y_date <- y[2,1]
y <- cbind(y[,2], y[,6])
colnames(y) <- c("SYMBOL", y_date)
c <- merge(c, y, by = "SYMBOL", all = F)
}
filenames = list.files(path = "C:/Users/home/Documents/Rest data", pattern = "*csv")
for (i in 1:length(filenames)){
y <- read.csv(filenames[i], header = T, stringsAsFactors = F)
c <- NSEmerg(c,y)
}
write.csv(c, file = "NSE.csv")
나는 PERL에 대한 단서가 없습니다. 이전에 인용구를 붙여 넣으면 PERL을 사용할 수 없다는 오류가 발생했습니다. 정확한 구문을 알려줄 수 있습니까? 내가 파일 130425.csv, 130423.csv, 130422.csv; 3 파일로 펄에서 새로운 파일을 만드는 법? 모든 3 개의 파일은 작업 디렉토리에만 있습니다. 내가 당신의 코드를 타이핑 할 때, 그것은 저에게 Perl -pe1 130425의 뜻밖의 수치 상수를 말하는 오류를 던졌습니다. 죄송합니다. 다시 말하자면,'pattern' 인자는 정규 표현식이므로, 당신은 마침표를 벗어나야합니다. 그렇지 않다면, 코딩과 R – planetpb