2013-06-15 3 views
2

데이터 프레임이 30 개의 데이터 프레임으로 표시 될 수있는 데이터 소스가 있습니다. (데이터 프레임을 말하는 것이지만 더 나은 구조가 있으면 사용하는 것이 좋습니다. 아무것도 아직 쓰여지지 않았다). 각 데이터 프레임은 다른 데이터 프레임과 직접적인 관계가 없지만 각각 3 열 및 n 행을가집니다. 열 1은 레이블이고 열 2와 3은 값 (항상 숫자)입니다.불규칙한 크기의 데이터 프레임 세트를 나타냅니다. R

유형의 경우 각 데이터 프레임이 파티에서 먹는 음식 목록이고 각 열은 앨리스와 밥이 먹는 각 항목의 수를 나타냅니다. 예를 들어

A = [5 x 3] # (apples, pears, cookies, grapes, watermelon) 
      # --------------------------------------------------- 
      # item   Alice  Bob 
      # apples   3  7 
      # pears   1  2 
      # cookies   10  4 
      # grapes   238  483 
      # watermelon  0  1 
      # --------------------------------------------------- 

B = [1 x 3] # (grapes) 
C = [3 x 3] # (beef, rice, apples) 
... 
Z = [4 x 3] # (rice, grapes, watermelon, beef) 

내가 모든 항목 위에

  • 일반 질문을 할 수 있도록, 데이터 구조 이러한 행렬을 표현하고자하는 - 예를 들어, Alice와 Bob 중 누가 가장 많은 항목을 먹었습니까? 평균, 표준 편차 등은 무엇입니까?
  • 대부분의 포도에서 앨리스와 밥 중 어느 쪽이 좋습니까? 나는 항상리스트의 목록을 가지고 정말 추한 코드를 작성 결국 이런 종류의 문제를 가지고 때마다

[] 운영자 또는 as.matrix()/as.list()/as.dataframe() 기능을 필요로하며, 일반적으로 일을 정말 엉터리 방법처럼 보인다 .

이러한 종류의 데이터에 대해 가장 좋은 방법은 무엇입니까?

+3

'rbind'와 함께 이들을 모두 바인딩하는 방법 (그리고 'ID'(= A, B, ... Z)라는 별개의 열로 이름을 지정하는 방법) – Arun

+0

여러 데이터 프레임에 sam 항목이있는 경우, 예를 들어 당신의 예에서 A와 B 모두 포도를위한 행을 포함하고 있습니다. –

답변

3

아룬의 코멘트 @에 따라하면 쉽게 문제의 당사자 나타내는 또 다른 열이 하나의 데이터 프레임을 만들 수 있습니다

A = read.table(text="item   Alice  Bob 
        apples   3  7 
        pears   1  2 
        cookies   10  4 
        grapes   238  483 
        watermelon  0  1", header=T) 

B = read.table(text="item   Alice  Bob 
        grapes   13  26", header=T) 

C = read.table(text="item   Alice  Bob 
        beef    1  3 
        rice    1  2 
        apples   1  0", header=T) 

Z = read.table(text="item   Alice  Bob 
        rice    2  1 
        grapes   10  15 
        watermelon  1  0 
        beef    0  2", header=T) 

A$party = "A"; B$party = "B"; C$party = "C"; Z$party = "Z" 
dframe = rbind(A, B, C, Z) 

여기에서, 당신은 어려움없이 열 기능을 얻을 수 있습니다 :

apply(dframe[,2:3], 2, sum) 

개별 항목을 처리하고 당사자간에 중복이있는 경우 원본 데이터 프레임에서 joins을 수행 할 수 있습니다. R here에이 작업을 수행하는 데 필요한 SO 스레드가 있습니다.