2013-08-19 4 views
0

나는 내 질문에 대한 답변이있을 것이라고 확신하지만 중복성을 위해 R에 절대적으로 새로운 기능과 인스턴트 메시지를 찾지 못하는 것 같습니다!트랜스 포즈 및 병합 데이터 세트 R

그래서 나는 거대한 데이터 세트를 가지고 있습니다. 17K obs는 35 가지 변수가 있습니다. 그것은 as.matrix를 가져 와서 강요 한 txt 파일이었습니다. 첫 번째 열에는 문자 값이 있고 나머지 열에는 숫자 값이 있습니다.

구조 -

>str(data_m) 
chr [1:17933, 1:35] "RAB12" "TRIM52" "C1orf86" "PLAC9" "MORN3" "LOC643783" "LOC389541" "OAZ2" ... 
- attr(*, "dimnames")=List of 2 
    ..$ : NULL 
    ..$ : chr [1:35] "Name" "X118" "X12" "X21" ... 

이제이 열이있는 또 다른 작은 긴 형태의 데이터 세트가 - ID와 성별.

> str(data_maleids) 
'data.frame': 24 obs. of 2 variables: 
$ id : Factor w/ 34 levels "X118","X12","X21",..: 8 23 9 19 10 7 5 4 2 30 ... 
$ gender: Factor w/ 2 levels "female","male": 2 2 2 2 2 2 2 2 2 2 ...` 

예 : -

row.names id gender 
1 1   X37 male 
2 2   X64 male 

내가 제 2 데이터 세트에 존재 만 IDS (X37, X64 등)을하기위한 곳 중 1 번째 데이터 집합을 부분 집합을 수행 할 수 있기를 바랍니다.

큰 데이터 집합을 전치하려했지만 열 이름의 문제로 인해이 문제를 해결할 수 없습니다.

+2

첫 번째 데이터 프레임을 읽을 때 행렬을 강요하지 마십시오. 두 번째 데이터 프레임 (ID와 성별)을 읽을 때'stringsAsFactors = FALSE'를 설정하십시오. 그런 다음'df1 [df1 $ Name % in % df2 $ id] '를 실행하십시오. – Thomas

+0

$ 이름보다는 colnames (df1)이어야합니다? 왜냐하면 df2의 id는 실제로 df1의 열 이름이기 때문입니다. 그러나 논리는 효과가있었습니다. 감사 ! 그러나 다시 원래의 데이터 세트에서 첫 번째 열 $ 이름을 다시 병합의 또 다른 단계로 이어질 수 있지만 최선의 방법은 내가 그것을 할 수 없습니다. – user2695213

답변

2

첫 번째 의견은 "첫 번째 열에는 문자 값이 있고 나머지 열에는 숫자 값이 있습니다"라는 문구에 대한 첫 번째 의견입니다. data_m은 행렬이므로 모든 열은 같은 유형입니다. 이 경우 문자. str()의 출력에서 ​​확인할 수 있습니다. R의 행렬을 여러 열로 배열 된 벡터로 생각하십시오.

둘째로이 작업을 수행하려면 data.table 패키지 (아직 설치하지 않았다면 설치해야 함)를 사용하는 것이 좋습니다. 구문의 스케치은 아래와 같습니다. data_m <- fread("file.name.txt")

  • 키 :

    1. 의 데이터를 읽고 멋진 기능 fread()data.table 개체로 텍스트 파일에서 데이터를 읽을 수있는 data.table 패키지에있다 by 변수 id : setkey(data_m, id)
    2. data_maleids : ids <- sort(unique(data_maleids$id))의 ID 벡터를 만듭니다.
    3. 필요한 케이스를 선택하십시오 : data_m[id %in% ids].
  • +1

    안녕하세요 .. data.table 패키지를 설치했지만 R 캔트가 fread 함수 (v 3.0.1)를 찾은 것 같습니다. "오류 :"fread "함수를 찾을 수 없습니다. – user2695213

    +2

    'require (data.table)'를 사용하여 세션 중에 사용 가능하게하려면 패키지를로드해야합니다. – djhurio

    관련 문제