2016-07-18 2 views
0

나는 Ethnicity이라는 열이있는 test.data이라는 데이터 프레임을 가지고 있습니다. 소수 민족 그룹 (실제 데이터가 많음), Adygei, Balochi 및 Biaka_pygmies의 세 그룹이 있습니다. 이 데이터 프레임을 하위 분류하여 각 종족 그룹에서 두 개의 샘플 (행)을 무작위로 포함하고 result을 얻고 싶습니다. R에서 이것을 어떻게 할 수 있습니까?각 그룹에서 두 세트의 행을 무작위로 선택하는 방법 R

test.data <- structure(list(Sample = c("1793102418_A", "1793102460_A", "1793102500_A", 
"1793102576_A", "1749751113_A", "1749751187_A", "1749751189_A", 
"1749751285_A", "1749751356_A", "1749751195_A", "1749751218_A", 
"1775705355_A"), Ethnicity = c("Adygei", "Adygei", "Adygei", 
"Adygei", "Balochi", "Balochi", "Balochi", "Balochi", "Balochi", 
"Biaka_Pygmies", "Biaka_Pygmies", "Biaka_Pygmies"), Height = c(0, 
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)), .Names = c("Sample", "Ethnicity", 
"Height"), row.names = c("1793102418_A", "1793102460_A", "1793102500_A", 
"1793102576_A", "1749751113_A", "1749751187_A", "1749751189_A", 
"1749751285_A", "1749751356_A", "1749751195_A", "1749751218_A", 
"1775705355_A"), class = "data.frame") 

결과

     Sample  Ethnicity Height 
    1793102418_A 1793102418_A  Adygei  0 
    1793102460_A 1793102460_A  Adygei  0 
    1749751189_A 1749751189_A  Balochi  0 
    1749751285_A 1749751285_A  Balochi  0 
    1749751195_A 1749751195_A Biaka_Pygmies  0 
    1775705355_A 1775705355_A Biaka_Pygmies  0 

답변

2

우리는 data.table를 사용할 수 있습니다. 'data.frame'을 'data.table'(setDT(test.data))으로 변환하고 'Ethnicity'로 그룹화하고, 우리는 sample 행 시퀀스를 기반으로 행을 부분 집합합니다. base R

test.data[ with(test.data, unlist(tapply(seq_len(nrow(test.data)), 
        Ethnicity, FUN = sample, 2))), ] 
+1

데이터 테이블 라인에서

setDT(test.data)[, .SD[sample(1:.N,2)], Ethnicity] 

또는 tapply을 사용하여 정말 아름답습니다. – snaut

관련 문제