2014-07-05 4 views
1

내 데이터 프레임에는 9 개의 열과 3198 개의 행이 있습니다. 열 중 하나에서 'NA'가 82 행마다 반복됩니다. 누락 된 값을 동일한 데이터 프레임의 다른 열의 값으로 대체하려고합니다. 작은 데이터 세트로 설명해 드리겠습니다.붙여 넣기()를 사용하여 NA 바꾸기 R

df <- data.frame(a = LETTERS[1:6], b = rep(seq(1:3), 2)) 

df$b[1] <- 'NA' 
df$b[4] <- 'NA' 

> df 
    a b 
1 A NA 
2 B 2 
3 C 3 
4 D NA 
5 E 2 
6 F 3 

for (i in 1: nrow(df)){ 
     if ('NA' %in% df$b[i]){ 

       df$b[i] <- paste("box", df$a[i]) 
     } 
} 

> df 
    a  b 
1 A box A 
2 B  2 
3 C  3 
4 D box D 
5 E  2 
6 F  3 

코드는이 작은 데이터 세트에서 작동합니다. 난 정확히 내 큰 데이터 세트에서 동일한 일을하고 있지만 어떤 이유로 누락 값은 여전히 ​​대체되지 않습니다. 무슨 일이 벌어 질지 몰라? 여기 예제 데이터 세트에서 코드가 작동한다고해서 이상한 질문 일 수 있습니다. 검토를 위해 실제 데이터 세트를 게시 할 수 없습니다. 다음 내용이 도움이 될 수 있습니다.

> str(dataset) 
'data.frame':  3198 obs. of 8 variables: 
$ Local Identifier   : chr "NEZ0100" "NEZ0100-1" "NEZ0100-2" "NEZ0100-3" ... 
$ Local System    : chr "Freezerworks" "Freezerworks" "Freezerworks" "Freezerworks" ... 
$ Parent ID    : chr "NEZ0100" "NEZ0100" "NEZ0100" "NEZ0100" ... 
$ Storage Type    : chr "Box-9X9" "BoxPos" "BoxPos" "BoxPos" ... 
$ Storage Label   : chr NA "A1" "A2" "A3" ... 
$ Capacity     : int 81 1 1 1 1 1 1 1 1 1 ... 
$ Movable     : chr "Y" "N" "N" "N" ... 
$ Storage Unit Order Number: int 0 1 2 3 4 5 6 7 8 9 ... 

이 문제는 $ Storage Label에서 발생합니다. 추가 정보가 필요한 경우 알려 주시기 바랍니다. 감사.

답변

4

R은 누락 값에 NA을 사용합니다. NA은 특수 값으로 문자 값 "NA"과 다릅니다. str(dataset)NA 값이 따옴표로 표시되어 있지 않으므로 문자열이 아닌 R의 특수한 NA 값임을 알고 있습니다. 귀하의 예를 들어 그래서, 그것은 NA=='NA'보다는 is.na()를 사용하여 더 많은

df <- data.frame(a = LETTERS[1:6], b = rep(seq(1:3), 2)) 
df$b[1] <- NA 
df$b[4] <- NA 

당신의 테스트처럼 정말. 또한, 우리는 우리가 할 수 있고, NA 값을 대체하기 위해 여기에 어떤 루프를 필요가 없습니다 우리가 여기 paste를 사용하여 문자로 숫자에서 해당 열을 변환 것

a  b 
1 A box A 
2 B  2 
3 C  3 
4 D box D 
5 E  2 
6 F  3 

참고를 제공

df$b[is.na(df$b)]<-paste("box", df$a[is.na(df$b)]) 
df 

,하지만 실제 "스토리지 레이블"열이 어쨌든 문자이므로 아무 것도 변경하지 않는 것처럼 보입니다.

+0

단순히 완벽합니다. 고마워. – sedeh

관련 문제