R의 "길이가 0 인 인수"

Xiwen

나는 이와 같은 데이터를 가지고 있고 그것으로 플롯을 만드는 방법을 모르기 때문에 다른 형태로 변경하기 위해 스크립트를 작성했습니다.

그리고 다음은 dput (head (e1))의 결과입니다.

structure(list(lon = c(-26.583, -26.25, -26.417, -67.25, -67.25, 
-67.417), lat = c(-59.083, -58.417, -58.417, -55.917, -55.75, 
-55.75), pre1 = c(105.4, 106.3, 106.6, 73.1, 68.7, 70.2)), .Names = c("lon", 
"lat", "pre1"), row.names = c(NA, 6L), class = "data.frame")

첫 번째 열은 경도이고 두 번째 열은 위도, 세 번째 열은이 지점의 강수 값입니다. 내가하고 싶은 것은이 데이터로지도를 만드는 것이지만,이 형식을 다루는 방법을 모르기 때문에 3 개의 매트릭스로 변경하고 싶습니다. 하나는 경도, 하나는 위도, 하나는 강수량, 그리고 내가 할 수있는 것보다 image.plot (lon, lat, pre1) 함수를 사용하여 강수지도를 만듭니다.

이것은 내 스크립트입니다.

rerange<-function(e1) {
latq<-sort(e1$lat,decreasing = T)
latq<-as.matrix(latq)
latq1<-unique.matrix(latq)
lonq<-sort(e1$lon)
lonq<-as.matrix(lonq)
lonq1<-unique.matrix(lonq)
lenlon<-length(lonq1)
lenlat<-length(latq1)
finalq<-matrix(0,lenlon,lenlat)
for (i in 1:lenlat) {
  for (j in 1:lenlon) {
      finalq[i,j]<-e1$pre1[e1$lon == lonq1[j] & e1$lat == latq1[i] ]
    }
  }
return(finalq)
}

그러나 다음과 같은 오류를 반환합니다.

Error in finalq[i, j] <- e1$pre1[e1$lon == lonq1[j] & e1$lat == latq1[i]] : 
replacement has length zero

다른 방법을 시도했지만 오류를 파악할 수 없는데 어떻게 해결할 수 있습니까? 어떤 도움이라도 대단히 감사하겠습니다.

ira

좋아, 당신의 데이터를 확인하고, 나는 이것이 당신이 추구하는 것입니다.

# create the dataframe
df <- structure(list(lon = c(-26.583, -26.25, -26.417, -67.25, -67.25, 
                   -67.417), lat = c(-59.083, -58.417, -58.417, -55.917, -55.75, 
                                     -55.75), pre1 = c(105.4, 106.3, 106.6, 73.1, 68.7, 70.2)), .Names = c("lon", 
                                                                                                           "lat", "pre1"), row.names = c(NA, 6L), class = "data.frame")

# change from long to wide format
test <- reshape(df, timevar = "lat", idvar = "lon", direction = "wide")
# turn missing values into zeros
test[is.na(test)] <- 0
# use lon for rownames
rownames(test) <- test[, 1]
# drop the first column
test <- test[,c(2:5)]
# load stringr library
library(stringr)
# drop text from column names
colnames(test) <- str_replace(colnames(test), "pre1.", "")
# put rownames and colnames into increasing order
test <- test[order(rownames(test), decreasing = TRUE), order(colnames(test), decreasing = TRUE)]
test
# load the plotting library
library(fields)
# make the plot
image.plot(as.numeric(rownames(test)), as.numeric(colnames(test)),  as.matrix(test))

이것이 필요한 것입니까?

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사