2013-10-29 4 views
0

이것은 지난 해이 사이트에서 저에게 성공적으로 답변 된 질문에 대한 후속 질문입니다. How to take the mean of last 10 values in a column before a missing values using R을 참조하십시오.R에서 행 범위 사이의 값의 평균을 취하는 방법?

이전에 누락 된 값보다 먼저 열의 마지막 10 개 행 평균을 취하는 방법을 묻습니다. 내 데이터는 나무의 성장률입니다. 첫 번째 열은 연도이고 오른쪽 열은 개별 나무의 성장률이며, 각 트리가 죽은 해에 끝납니다. 각 나무가 태어나 기 전에 나무가 죽은 후에 성장률 값은 NA입니다. 나는 각각의 나무가 죽기 전에 지난 10 년의 평균을 위해 필요한 경우, 작업 코드이었다

sapply(dataframe, function(dataframe) mean(tail(na.omit(dataframe), 10))) 

나중에, 나는 각 나무의 삶의 처음 50 년 동안 평균 성장률을하기 위해 필요한, 내 질문은, 지금

sapply(dataframe, function(dataframe) mean(head(na.omit(dataframe), 50))) 

: 그래서 나는이 코드를 사용하여 "꼬리"에 대한 "머리"를 대체하여 이런 짓을 내가 각 트리의 첫 번째 50에서 100 세 사이의 성장을 평균을 얼마나 성장? 그래서 50-100 세 사이의 각 트리의 평균 성장을 원하십니까? 특정 행 사이의 평균을 허용 할 수있는 ("머리"또는 "꼬리"와 유사한) 인식하지 못하는 함수가 있습니까? 어려움은 각각의 나무가 다른 해에 태어 났거나 (또는 ​​죽었다), 그래서 나는 단순히 특정 해를 색인 할 수 없다는 것입니다.

도움을 주셔서 감사합니다. 당신이 필요로 무엇을 얻을 수 headtail 결합

케이티

답변

0

. 당신이 원한다면 당신은 또한 모든 NA 값이 떨어질 것이다 na.omit 때문에, 명시 적 인덱싱을 사용할 수

sapply(dataframe, function(x) mean(tail(head(na.omit(x), 100),50))) 

, 그래서 na.omit(x)[51:100] : 예를 들면 : 당신이 원하는 것은 같은

> x<-1:10 
> tail(head(x,4),2) 
[1] 3 4 

따라서 귀하의 경우에 본다 나무가 태어난 이래로 51-100 년이 될 것입니다. 따라서 함께 갈 수도 있습니다

sapply(dataframe, function(x) mean(na.omit(x)[51:100])) 

유일한 차이점은 열의 유효 항목 수가 100 개 미만인 경우입니다. 이 경우, head/tail 메소드는 마지막 50 개의 유효 항목의 평균을 제공합니다 (또는 총 수가 50 미만인 경우 적은). 반면 51 : 100 메소드는 NA를 리턴합니다.

+0

고맙습니다! 두 솔루션 모두 예상대로 작동했으며 100 년 미만의 성장을 기록한 일부 나무가 있으므로 색인 수정 (na.omit (x) [51 : 100])을 사용했습니다. – user1913921

관련 문제