안녕하십니까,
숫자와 많은 null 값(70-80% null)이 있는 열 A(약 15,000개 행)가 있습니다.
나는 행 i에서 다음의 평균과 같은 열 B를 구성하고 싶습니다: *A*의 마지막 10개의 null이 아닌 값
--> 이것은 A[row i-1] , A[row i-2], ...를 의미하고 10개의 null이 아닌 값을 가질 때까지 뒤로 이동합니다(또는 행 1에 도달하면 임의의 숫자 <= 10 얻은 null이 아닌 값)
나는 또한 중간값과 모드를 의미하는 것 외에도 다음과 같은 모드의 부드러운 버전을 만들고 싶습니다.
먼저 10개의 null이 아닌 값에 대해 가우스 평활화를 수행하고 해당 분포의 argmax(모드)를 취합니다.
어떤 생각이나 제안을 해주셔서 감사합니다!
***
솔루션 아이디어: 내가 가진 한 가지 생각은 마지막 10개의 null이 아닌 값으로 여러 가지 다른 계산을 수행하고 싶었기 때문에 먼저 항목이 마지막 10개의 null이 아닌 값과 동일한 배열인 열 C를 생성해야 한다는 것입니다. B1(평균), B2(중간), B3(평활 모드)를 생성하기 위해 열 C에서 작동하는 3개의 공식을 수행할 수 있습니다.
다음은 이 열 C 배열을 구성하는 방향으로 이동하는 몇 가지 코드 조각입니다.
//step 1 grab the last say 50 entries (some fixed amount that will likely have 10 non-nulls)
For Each Row( dt_join,
to = Row();
If( to - 50 < 0,
from = 1,
from = to - 50); // Quantile( 0.5,
values = :away_1g_pull_seconds[Index( From, To )] < 50, Break());
);
//step 2 convert array to list, drop nulls, convert list of first 10 entries back to array ...
//I don't know how to assign this to a row of C
num_lag = 10;
values = dt_join:A[Index( From, To )] ;
MyList = Remove(as list(values)[1], as list(Loc(as list(values)[1], .)) ); //convert array to list and remove nulls
Mat = Number Col Box("", MyList[1:10]) << get as matrix; //hack convert to array