2016-06-21 2 views
0

죄송합니다. 제목이 혼란 스럽다면이 문제를 설명하는 방법을 잘 모릅니다. 좋아, 그래서 샘플링 사이트입니다 하나의 열에는 데이터 프레임이 있는데, 그 중 많은 샘플링 방법 중 하나는 두 개뿐입니다. 여기에 단순화 된 버전입니다 : 이제동일한 열의 다른 값과 다른 열의 고유 값을 기반으로 데이터 선택 R

site <- c("X", "Y", "X","Z") 
method <- c("A", "B", "B", "A") 
data <- data.frame(site, method) 
data 
    site method 
1 X  A 
2 Y  B 
3 X  B 
4 Z  A 

일부 사이트는 샘플링 방식 B를 모두 사용하여 샘플링있어, 일부는 유일한 방법 A 또는 B 법

난 단지 그 사이트를 선택하려고에 의해 샘플링있어 두 가지 방법을 사용하여 샘플링했습니다. 예를 들어,이 데이터에 대한 결과는 다음과 같습니다 솔직히이 작업을 수행하는 방법을 모르기 때문에 내가 샘플 코드가없는

 site method 
    1 X  A 
    2 X  B 

. 도와주세요!

+2

비슷한 것 - http://stackoverflow.com/questions/21421031/eliminate-groups-which-have-different-values-in- r/21421184 - 거기에 링크 된 질문도 매우 비슷합니다. – thelatemail

답변

2

data.table을 사용할 수 있습니다. 'data.frame'을 'site'로 그룹화 한 'data.table'(setDT(data))로 변환하십시오. if 'method'길이가 1보다 큰 경우 Data.table의 하위 집합을 가져옵니다.

library(data.table) 
setDT(data)[, if(uniqueN(method)>1) .SD , by = site] 

또는 dplyr, 우리는 그것을 할 수 있습니다.

library(dplyr) 
data %>% 
    group_by(site) %>% 
    filter(n_distinct(method)>1) 

가능한 base R 옵션

data[ with(data, ave(method, site, FUN = function(x) length(unique(x))>1)),] 
관련 문제