2010-05-04 5 views
13

나는 "NULL"와 "# N/A"를 포함하는 data.frame의 요소를 대체하기 위해 노력하고있어, 나는 문제로 실행 해요 :R : data.frame의 요소를 대체하는 방법?

foo <- data.frame("day"= c(1, 3, 5, 7), "od" = c(0.1, "#N/A", 0.4, 0.8)) 

indices_of_NAs <- which(foo == "#N/A") 

replace(foo, indices_of_NAs, "NULL") 

오류 [<-.data.frame (*tmp*, 목록, 값 = "NULL") : 새로운 열은 기존 열 뒤에 구멍을 남깁니다

내 색인은 벡터로 data.frame을 처리하지만 그 대체 기능이 어떻게 든 다르게 처리한다고 생각합니다. 문제가 무엇인지 잘 모르겠습니다.

답변

19

NULL은 실제로 "없음"을 의미하며 "누락"이 아니므로 실제 값을 대신 할 수 없습니다. 누락 된 R은 NA를 사용합니다.

is.na의 대체 방법을 사용하여 선택한 요소를 직접 업데이트 할 수 있으며, 이는 논리적 결과와 함께 작동합니다. (인덱스를 위해 which를 사용하는 것은 is.na에서만 작동하며 [오류의 원인 인 [호출 목록 액세스를 직접] 사용합니다.

foo <- data.frame("day"= c(1, 3, 5, 7), "od" = c(0.1, "#N/A", 0.4, 0.8)) 
NAs <- foo == "#N/A" 

## by replace method 
is.na(foo)[NAs] <- TRUE 

## or directly 
foo[NAs] <- NA 

그러나, 그것은 C (로 만들 때 이미) 강제 강제하여 OD 열에서 (기본적으로 실제로 요소) 문자열을 처리하고, 개별적으로 열을 치료해야 할 수도 있습니다. 숫자 열은 "# N/A"문자열과 일치하지 않습니다.

+0

너무 냉정한 "is.na <-"가 있다는 것을 결코 깨닫지 못했습니다. – geoffjentry

+0

무엇을 의미합니까? "모든 숫자 열은"# N/A "문자열과 일치하지 않습니다." 내가보고있는 열의 종류를 어떻게 확인할 수 있습니까? – spier

+0

좋은 해결책. 값을 NA로 대체 한 후 열을 숫자로 재 해석하게하려면 어떻게해야합니까? 수십 개의 열이 있는데 어떤 것이 변경된 NA 값을 가지는지 알기가 너무 어렵습니다. – Dave

1

replace 함수는 벡터를 기대하며 data.frame을 제공합니다.

현재 사용중인 문자 값 대신 NANULL을 사용해보십시오. 그렇지 않으면 누락 된 값을 처리하기 위해 R의 모든 기능을 이용할 수 없습니다.

편집

당신은 이런 식으로 뭔가를 기능을 적용하거나 할 사용할 수 있습니다

foo <- data.frame(day= c(1, 3, 5, 7), od = c(0.1, NA, 0.4, 0.8)) 
idx <- which(is.na(foo), arr.ind=TRUE) 
foo[idx[1], idx[2]] <- "NULL" 

는 길이가 0이 있기 때문에 당신은,이 경우에는 실제 NULL 값을 할당 할 수 없습니다. NANULL의 차이점을 이해하는 것이 중요하므로 ?NA?NULL을 읽는 것이 좋습니다.

+0

감사합니다. 셰인, 내 data.frame을 벡터로 변환하고 함수를 수행 한 다음 data.frame으로 다시 변환 하시겠습니까? 내가 추천하는 데이터 형식을 사용하겠습니다. – John

12

x$col[is.na(x$col)]<-value 

?
데이터 프레임을 변경하지 않으셔도됩니다

관련 문제