0
데이터 프레임 x1의 여러 열에서 NA 값을 일반 및 고유 한 특성 'ID'에 따라 x2 및 x3 데이터 프레임의 값의 평균으로 대체하려고합니다. 내가 this post에 감사를 한 번에 1 열을 위해 그것을 할 수있는 대답을 발견여러 열의 NA를 다른 데이터 프레임의 평균값으로 바꿉니다.
ID A B C .....
01 2 5 7 .....
02 NA NA NA .....
03 5 4 8 .....
:
모든 dataframes (각 dataframe는 특정 연도입니다) 동일한 열 구조를 가지고있다.
x1$A[is.na(x1$A)] <- (x2$A[match(x1$ID[is.na(x1$A)],x2$ID)] + x3$A[match(x1$ID[is.na(x1$A)],x3$ID)])/2
그러나 저는 이것을 적용하기 위해 약 100 개의 coulmns가 있기 때문에이를 수행하는 더 똑똑한 방법을 갖고 싶습니다. 나는 this post과 here에서 제안을 시도했다. 이 코드를 만들었지 만 작동시키지 못했습니다.
x1[6:105] = as.data.frame(lapply(x1[6:105], function(x) ifelse(is.na(x), (x2$x[match(x1$ID, x2$ID)]+x3$x[match(x1$ID, x3$ID)])/2, x1$x)))
다음 오류 얻었다 : I가 초기 열 전체에 근무 X는 열 이름을 나타내는 함수 (x)를 생각
Error in ifelse(is.na(x), (x2$x[match(x1$ID, x2$ID)] + x3$x[match(x1$ID, : replacement has length zero
을하지만은 각 셀 값을 나타낸다 생각 즉 왜 일하지 않을거야.
저는 R에서 초보자입니다. 논리가 여러 열에 적용될 때 내가 잘못 가고있는 부분을 알려 주시면 감사하겠습니다.
이것은 아마도 오류의 원인이되지 않지만'ifelse'의 마지막 인수는'x1 $ x'보다는 x이어야합니다. – lmo