큰 데이터 프레임, 약 2600 개의 관측치가있는 300+ 열 (시계열)이 있습니다. 열은 많은 NA와 짧은 시간 시리즈로 채워지고 일반적으로 NA는 다시 나타납니다. 각 열의 첫 번째 비 NA 값을 찾고 NA로 바꾸고 싶습니다.R : 데이터 프레임 : NA의 첫 번째 비 NA 값을
하기 전에 :
x1 x2 x3 x4
1 NA NA NA NA
2 NA NA NA NA
3 1 1 NA NA
4 2 2 1 1
5 3 3 2 2
6 4 4 3 3
7 5 5 4 4
8 6 6 5 5
9 7 7 6 6
10 8 8 7 7
11 9 9 NA NA
12 10 10 NA NA
13 NA NA NA NA
14 NA NA NA NA
후 :
x1 x2 x3 x4
1 NA NA NA NA
2 NA NA NA NA
3 NA NA NA NA
4 2 2 NA NA
5 3 3 2 2
6 4 4 3 3
7 5 5 4 4
8 6 6 5 5
9 7 7 6 6
10 8 8 7 7
11 9 9 NA NA
12 10 10 NA NA
13 NA NA NA NA
14 NA NA NA NA
나는 주위 검색과 발견했습니다
이
나는 단지 훨씬 더 큰 dataframe으로 달성하기 바라고 무엇인가 각 열에 대해이 작업을 수행하는 방법이지만 전체 데이터 프레임에 적용하려는 노력은 어렵습니다.내 원래 dataframe 재현 예시 dataframe을 만들었다 :이 (@Joshua 울리히 here 의해 제공) 1 열에 NA와 제 1 값을 대체 사용한
#Dataframe with NA
x1=x2=c(NA,NA,1:10,NA,NA)
x3=x4=c(NA,NA,NA,1:7,NA,NA,NA,NA)
df=data.frame(x1,x2,x3,x4)
을 그러나 싶습니다 내가 함수로 위를 설정하고 apply
/lapply
로 모든 열에 대해 실행하는 것을 시도했다
NonNAindex <- which(!is.na(df[,1]))
firstNonNA <- min(NonNAindex)
is.na(df[,1]) <- seq(firstNonNA, length.out=1)
뿐만 아니라: 수동 300 개 + 코드를 변경하지 않고 모든 컬럼에 적용합니다반복하지만, 내 데이터 프레임에 변경 사항을 적용하는 방법을 실제로 파악하지 못했습니다. 나는 내가 R에서 처음으로 작은 걸음을 들기 때문에 내가 간과 한 어떤 것이 있다고 확신한다.
모든 제안을 매우 높이 평가할 것입니다!
을 제안 할 수 있습니다. 어쩌면'df [] lapply (df, function (x) replace (x, Position (Neg. (is.na), x), NA))'가 좋을 수도 있습니다. 이는 약간의 오버 헤드를 추가하고 'df [] <- Map (replace, df, lapply (df, Position, f = Negate (is.na)), NA)' – thelatemail