2012-09-07 5 views
5

I가 데이터 프레임의 정수배 열, I는 이와 같은 출력을 생성 0레코딩의 NA

df1 <- as.data.frame(sapply(paste(sample(letters,50,T),sample(letters,10), sep=""), function(x) {sample(c(NA,0:5),10,T)})) 
df2 <- as.data.frame(sapply(paste(sample(letters,5,T),sample(letters,10,T), sep=""), function(x) {sample(letters[1:5],10,T)})) 
df <- cbind(df2,df1) 

로 레코딩 할 필요가 NAS가 모든 (처음 몇 만 표시된 55)의 열은

enter image description here

내가 수동으로 각 열의 df$col[is.na(df$col)] <- 0처럼 0으로 NAS를 레코딩 가야하지만, 너무 많은 열이 있다는 것을 제공 할 수 있습니다, 그 밖으로 모두 입력 할 시간이 걸릴 것입니다 .

어떻게 이러한 NAs를 모두 한 줄 또는 세 줄로 0으로 다시 코딩 할 수 있습니까? 당신은 매우 가까웠다

은 (내가 하나의 용융 열을 코딩 한 후 정수 열을 녹여 수 실현,하지만 난 오히려 기본 R에서이 작업을 수행 할 것)

답변

11

을 :

df[is.na(df)] <- 0 
+0

와우는 .... 쉽게이었다 믿을 수 없다. 그런 다음 어떻게 다시 코딩 할 것인지를 지정할 수 있습니까? –

+1

신경 쓰지 마라, 알았다. 'df [6:10] [is.na (df [6:10])] <- 0'. 대괄호 두 개를 연속으로 추가한다고 생각조차하지 않았습니다. –

+0

@ TommyO'Dell, 괜찮습니다. 내가 말했듯이, 당신은 매우 가까웠습니다! – A5C1D2H2I1M1N2O1R2T1

2

사용 plyrcolwise 메타 기능이 쉽게 :

dfZ=colwise(function(x)ifelse(is.na(x),0,x))(df) 
+1

@ mrdwab의 방법은 확실히 입력하기가 더 짧습니다. –

관련 문제