2013-05-22 6 views
0

나는 매우 큰 데이터 세트에서 read.table을 사용하여 읽고 있습니다. 데이터를 읽은 후에는 특정 위도/경도 영역에 해당하는 레코드 만 보관하려고합니다. 그래서 기본적으로 $ Lat 및 $ Lon에 상한 및 하한을 정의하고 다른 모든 행을 삭제하려고합니다. 이것은 꽤 쉬운 작업이지만 R 코딩에 익숙하지 않고 가장 우아한 접근 방식을 찾길 원합니다. 여기에 데이터를 읽어 내 코드입니다 : 대신 나는 모든 트랙 포인트를 유지하는 것이 마지막 부분의회의 조건에 따라 R 행 삭제하기

#trackfilenums=1:96 #these are the legs of the track files 
trackfilenums=1 

for(i in trackfilenums){ 

print(paste(i, 96, Sys.time(), sep=" : ")) 
track.data.file <- paste('input/track_param/track_param_',zpad(i,4),'.txt', sep="") 
track.data <- read.table(track.data.file ,fill=TRUE,as.is=TRUE,skip=1) 
sel <- !is.na(track.data[,9]) 
track.data <- track.data[sel,] 
colnames(track.data) <- c("ID", "Hr", "Lon", "Lat", "UT", "VT", "LandFlag", "ET", "CP", "Penv", "Rmax", "Vmax", "X1", "N", "EOF1", "EOF2", "EOF3", "EOF4", "Angle", "MPI", "Filling.alpha", "Filling.beta", "Filling.gamma") 

## keep all points 
track.data<-track.data[,c("ID", "Hr", "Lon", "Lat", "UT", "VT", "LandFlag", "ET", "CP", "Penv", "Rmax", "Vmax", "X1")] 

} 

가, 난 단지 위도

(30) 사이 (35), 및 경도 사이의 128과 140을 유지하고 싶습니다
+0

간단히 집합 행 : 요청으로, 여기에 '집합'형태로 동일한 코드입니다. – Roland

+0

하위 집합 코드의 구문을 설명 할 수 있습니까? 감사! – kimmyjo221

+0

track.data.sub - 하위 집합 (track.data, Lon> = 128 & Lon <=140 & Lat> = 30 및 Lat <= 35) – kimmyjo221

답변

3

나는 당신이 찾고있는 것이 행 삭제가 아니라 행 선택이라고 생각한다.

# Note that I am using the 'attach' function to 
# make things a little easier to read. 
attach(track.data) 
track.data[Lat >= 30 & Lat <=35 & Lon >=128 & Lon <= 140,] 
detach(track.data) 

이렇게하면 네 가지 기준 모두를 충족하는 행을 선택하도록 데이터 프레임에 지시합니다.

업데이트 : 그 조건에 따라

subset(track.data, Lat >= 30 & Lat <=35 & Lon >=128 & Lon <= 140) 
+0

'첨부'를 사용하지 마십시오. '? subset'을보십시오. – Roland

+0

@Roland 앞서 언급했듯이, 가능한 한 OP의 독창적 인 접근 방식을 그대로 유지하면서 예제를 읽을 수있게 만드는 것입니다. 나는 벡터 수학쪽으로 기울어지기 때문에 'attach'또는 'subset'을 사용하지 않는 편이 좋지만, attach는이 예제에서 건너 뛴다. 하위 집합 코드를 예제로 추가 할 수 있습니다. – Dinre

관련 문제