2014-04-22 2 views
1

두 개의 버스트 된 행이있는 중간 크기의 데이터 프레임이 있습니다. 주소가 나쁘기 때문에 geocode() 지오 코딩하지 않았으므로 위도/경도 정보가 없습니다. 이 데이터 프레임에서 값을 편집 할 수없는 이유는 무엇입니까?

나는 놀 임시 프레임을 만드는 시도 : 나는 tmp.frame$Address <- c("Better Address 1","Better Addresss 2")tmp.frame의 값을 업데이트 할 수 있습니다

tmp.frame <- subset(all.sites, is.na(all.sites$lat)) 

하지만 더 큰 프레임의 값을 편집 할 수없는 것. all.sites[392, 7] 누락/위도 경도와 명소 중 하나이며 나는 all.sites[392, 7] = c("Better Addy") 트릭을 할 것이라고 thought, 대신 나는이납니다 : tmp.frame[2,4] = c("Better") 작품 잘

Warning message: 
In `[<-.factor`(`*tmp*`, iseq, value = "Better Addy") : 
    invalid factor level, NA generated 

호기심. 그래서 저는이 둘의 차이가 무엇인지 모르겠습니다.

참고 : 나는 vi(all.sites[392,7])을하려고 할 때이 약이 얻을 :

업데이트하려고하는 열이 정의에 의해 제한된 도메인이있는 factor이기 때문에 발생
structure(NA_integer_, .Label = c("10003 39th Avenue",..., class = "factor") 
+1

일부 열이 숫자 또는 문자가 아닌 요인으로 변환 될 수 있습니다. 이 경우 관련이있을 수 있습니다 : http://stackoverflow.com/questions/2851015/convert-data-frame-columns-from-factors-to-characters – Csislander

+0

그래, 캐릭터 클래스 값을 넣으려고합니다. 가능성이있는 요소 클래스 열은 무엇입니까? 아마도'tmp.frame $ Address <- as.factor (c ("Better Address 1", "Better Addresss 2"))'가 작동 할 것입니다. – sckott

+0

@Csislander는 오른쪽에 대해 들립니다. 감사. – Amanda

답변

4

(가능한 값 세트) . 항목을이 도메인의 일부가 아닌 수준으로 만들려고하면 경고와 NA이 생성됩니다. (가 나타내는 내용에 따라)

ff <- factor(sample(1:3, size=20, replace=TRUE)) ## factor of 1, 2, and 3 
ff[5] <- 4 ## try changing the fifth entry to an 'unknown' value 
levels(ff) ## show set of known values 

당신이 원하는 무엇이든 값을 수정할 수 있도록하려면

, 당신은 character에 요소를 변환해야하거나 integer이보십시오. 가능한 모든 값이 있다고 확신하면 요소로만 변경하십시오. 또한 직접 지정할 수도 있습니다.

ff2 <- factor(sample(1:3, size=20, replace=TRUE), levels=1:4) ## 1-4 are legal 
ff2[5] <- 4 ## accepted without problems 
head(ff2)  ## check 
관련 문제