2016-06-30 2 views
-2

필자는 1600 개의 행과 13 개의 행으로 이루어진 거대한 데이터 세트를 가지고 있으며, 열이이 사람의 특성 인 반면, 3 개의 행마다 한 사람의 데이터 만 표시합니다. 모든 사람 (3 줄)에 대한 모든 열의 중앙값을 얻고 싶습니다. 이에서 예를 들어모든 열에 대해 세 행 간격의 중앙값을 얻으려면 어떻게합니까?

:

C1 C2 C3 C4 C5... 
R1 1 2 3 4 5 
R2 6 7 8 9 1 
R3 2 3 4 5 6 
R4 7 6 9 8 3 
R5 3 4 6 2 5 
R6 9 7 4 3 2 
R7 2 5 9 7 6 
R8 3 5 8 3 2 
R9 9 4 6 5 8 

나는 다음과 같은 좀하고 싶습니다 :

C1 C2 C3 C4 C5 
R1 2 3 4 5 5 
R2 7 6 6 3 3 
R3 3 5 8 5 6 

합니다. . .

+0

예를 들어 R 's dput()을 사용하여 컴퓨터에서 읽을 수있는 예제 데이터를 제공하십시오. –

+0

Python 또는 R? 데이터 프레임은 무엇입니까? –

+0

.csv 파일이므로 Python 또는 R 코드로 열었습니다. –

답변

0

R, 우리는 summarise_each

library(dplyr) 
df1 %>% 
    group_by(grp = ((row_number()-1)%/%3)+1) %>% 
    summarise_each(funs(median)) 
# grp C1 C2 C3 C4 C5 
# <dbl> <int> <int> <int> <int> <int> 
#1  1  2  3  4  5  5 
#2  2  7  6  6  3  3 
#3  3  3  5  8  5  6 

또는


또는과 data.table

library(data.table) 
setDT(df1)[, lapply(.SD, median) , .(grp =gl(nrow(df1), 3, nrow(df1)))] 
# grp C1 C2 C3 C4 C5 
#1: 1 2 3 4 5 5 
#2: 2 7 6 6 3 3 
#3: 3 3 5 8 5 6 
를 사용하여 모든 컬럼의 median를 얻을 다음 %/%를 사용하여 그룹화 변수를 생성 aggregate

aggregate(.~grp, transform(df1, grp = ((1:nrow(df1) -1) %/%3) + 1), median) 
# grp C1 C2 C3 C4 C5 
#1 1 2 3 4 5 5 
#2 2 7 6 6 3 3 
#3 3 3 5 8 5 6 
+1

정말 고마워요 !!!! –

0

base R에서 당신은 배열로 데이터를 켜고 apply를 사용할 수 있습니다

DF <- read.table(text = " C1 C2 C3 C4 C5 
       R1 1 2 3 4 5 
       R2 6 7 8 9 1 
       R3 2 3 4 5 6 
       R4 7 6 9 8 3 
       R5 3 4 6 2 5 
       R6 9 7 4 3 2 
       R7 2 5 9 7 6 
       R8 3 5 8 3 2 
       R9 9 4 6 5 8", header = TRUE) 

M <- as.matrix(DF) 
dim(M) <- c(3, nrow(M)/3, ncol(M)) 
apply(M, c(2, 3), median) 
#  [,1] [,2] [,3] [,4] [,5] 
#[1,] 2 3 4 5 5 
#[2,] 7 6 6 3 3 
#[3,] 3 5 8 5 6 
0

여기 내 시도입니다. 세 개의 하위 목록마다 중간 값을 평가합니다. 압축을 푼 하위 목록의 zip에서 가져온 요소의 합계를 계산합니다.

t =[[1, 2, 3, 4, 5], [6, 7, 8, 9, 1], ...... 

median = lambda subl: list(map(lambda n: sum(n)/len(subl), zip(*subl))) 

for i in range(0, len(t), 3): 
    print(median(t[i:i+3])) 
관련 문제