2017-05-01 5 views
2

데이터 프레임 (df)을 가지고 있습니다. 각각의 사고에는 관련된 #, 관련된 각 사람의 # 및 사고 유형이 있습니다. 그것은 다음과 같이 보입니다.조건문을 기반으로 데이터 프레임에서 행을 제거 하시겠습니까?

x    y     z 
accident #1 person A accident type #1 
accident #1 person A accident type #2 
accident #2 person A accident type #1 
accident #2 person B accident type #2 
accident #2 person B accident type #3 
accident #3 person C accident type #1 

위의 경우, 사람 A는 두 가지 사고에 관련되어있었습니다. 첫 번째 사고에는 A 사람이 관련된 두 가지 유형의 사고가있었습니다. 사람 B는 사람 A와 관련되었지만 사고 유형이 두 가지 인 단일 사고에만 관여했습니다. 사람 C도 사고가 한 번있었습니다.

나는 하나의 사고에만 관련된 사람들의 서브 세트 을 수집하고자합니다. 그러나 모든 사고 유형을 포함하고 싶습니다. 위의 예제를 사용하면 다음과 같이 표현할 수 있습니다.

x    y     z 
accident #2 person #2 accident type #2 
accident #2 person #2 accident type #3 
accident #3 person #3 accident type #1 

어떻게해야합니까?

+1

들여 네 개의 공간을 사용할 수 있습니다 + K – Frank

+0

Google을 사용하십시오. 일반적인 작업이므로 – MichaelChirico

+0

@MichaelChirico 저는 R이 처음인데 Google에 정확히 무엇이 확실하지 않습니다. 내가 찾은 어떤 것도 내 구체적인 사례와 일치하지 않는다. –

답변

3

당신은 group_by, filtern_distinct를 사용하여 dplyr package하여이 작업을 수행 할 수 있습니다

library(dplyr) 
df %>% 
    group_by(y) %>% 
    filter(n_distinct(x) == 1) %>% 
    ungroup() 
0

우리는 코드 블록, 또는 강조하고 Ctrl을 만들기 위해 data.table

library(data.table) 
setcolorder(setDT(df)[, .SD[uniqueN(x)==1] , y], names(df))[] 
#   x  y    z 
#1: accident #2 person B accident type #2 
#2: accident #2 person B accident type #3 
#3: accident #3 person C accident type #1 
관련 문제