2017-02-21 6 views
1

40 개의 행과 20 개의 열을 가진 1000 개의 파일을 요약하려고합니다. 각 원본 크기 40x20을 보존하는 두 개의 요약 파일을 생성하려고합니다. 첫 번째 파일은 평균값을 가지며 두 번째 파일은 1000 개의 모든 값에서 파일의 각 위치의 표준 편차를 나타냅니다. 아래의이 게시물에서 모든 파일에서 평균을 수행하는 매우 우아한 방법을 찾았습니다 (@josliber에게 감사드립니다). 그러나 표준 편차로 논리를 확장하는 데 어려움을 겪고 있습니다.하나의 파일로 여러 csv 파일의 표준 편차

Average multiple csv files into 1 averaged file in r

은 내가 dataframes

csvs <- lapply(list.files(pattern="weather*.csv"), read.csv) 

의 목록에 내 데이터를로드 감소 지점 내 평균 요약 파일을 얻을 괜찮 았는데입니다. 표준 편차를 얻기 위해 비슷한 것을 할 수 있습니까?

Reduce("+", csvs)/length(csvs) 

답변

0

는 다시 비슷한 일을하지만, 표준 편차를 계산 뒤에 기본 수학을 사용할 수 있습니다 여기에 수학에 대한 자세한 내용은

# get the means as before 
means <- Reduce("+", csvs)/length(csvs) 

# make a new list of deviations from that known mean 
st.dev <- lapply(csvs, function(x) (x - means)^2) 

# use the list of deviations to calculate the standard deviation matrix 
st.dev <- sqrt(Reduce("+", st.dev)/length(st.dev)) 

는 "표준 편차"에 대한 위키 백과를 검색 할 수 있습니다.

+0

통계 검토 덕분에 정말 멋졌습니다. 나는 많은 의미를 가졌다. – ecolog

1

또 다른 옵션은 몇 가지 다른 통계 옵션을 엽니 다.

40x20 data.frames의 목록을 40x20x1000 배열로 변환하는 경우 3 차원으로 드릴링하는 40x20 "튜브"각각에 대해 apply 수 있습니다.

세 × 4 행렬의 샘플을 사용 :

set.seed(42) 
lst <- lapply(1:3, function(ign) matrix(sample(8), nrow=2)) 
lst 
# [[1]] 
#  [,1] [,2] [,3] [,4] 
# [1,] 8 2 3 4 
# [2,] 7 5 6 1 
# [[2]] 
#  [,1] [,2] [,3] [,4] 
# [1,] 6 3 7 8 
# [2,] 5 4 1 2 
# [[3]] 
#  [,1] [,2] [,3] [,4] 
# [1,] 8 3 4 2 
# [2,] 1 6 7 5 

abind 라이브러리를 사용하여, 우리는 임의로 세 번째 희미한 함께 바인딩 할 수 있습니다. (이 abind. 당신이 당신의 data.frames가 이미 목록에 포착되는 점을 감안 시작하는 것이 어디는 매트릭스와 마찬가지로 동일 크기의 data.frames와 동일하게 작동합니다.) 지금

library(abind) 
ary <- abind(lst, along = 3) 
dim(ary) 
# [1] 2 4 3 

그리고 임의의 실행 대부분 "열"또는 "열"과 비교하여 각 "튜브"를 따라 기능합니다 (apply을 사용하는 것이 좋습니다). apply를 사용하여 지금

mean(c(8,6,8)) 
# [1] 7.333333 
sd(c(8,6,8)) 
# [1] 1.154701 

: 예를 들어, 8, 6, 8, 우리는 다음과 같은 통계를 기대하는 세 가지 층에 [1,1] 값을 제공

apply(ary, 1:2, mean) 
#   [,1]  [,2]  [,3]  [,4] 
# [1,] 7.333333 2.666667 4.666667 4.666667 
# [2,] 4.333333 5.000000 4.666667 2.666667 
apply(ary, 1:2, sd) 
#   [,1]  [,2]  [,3]  [,4] 
# [1,] 1.154701 0.5773503 2.081666 3.055050 
# [2,] 3.055050 1.0000000 3.214550 2.081666 

이 좀 더 열어 각 계층 내의 인덱스가 의미 상으로 비교 될 수 있다고 가정 할 때, 동일한 크기의 1000 개의 데이터 프레임을 통계적으로 집계합니다. 중간 크기 또는 기타 백분위 수를 Reduce으로 결정하기 위해 작업 모델을 고안 할 수도 있지만, 90 백분위 수에 대해 apply(ary, 1:2, quantile, 0.9)을 사용하는 것은 매우 쉽습니다 (말하십시오).

+0

이 솔루션에 대해 감사드립니다. – ecolog