아마도 간단한 해결책 일 수는 있지만 우아한 방법을 찾을 수 없습니다. df
다음에서 나는 벡터에 따라 값을 찾아 경기뿐만 아니라 경기가있는 전체 그룹뿐만 아니라 반환 할.데이터 프레임을 벡터로 필터링하고 일치 그룹 반환
df <- data.frame(group= c("a","a","b","b","b","c","d","d"),
person = c("Tom","Jerry","Tom","Anna","Sam","Nic","Anna","Jerry"), stringsAsFactors = FALSE)
search_vector <- c("Tom","Nic")
예상 출력
df_result
group person
1 a Tom
2 a Jerry
3 b Tom
4 b Anna
5 b Sam
6 c Nic
하나는 물론 그것을 할 수 그러나이 단계에서 더 나은 방법을이 있어야한다
df_sub <- subset(df, person %in% search_vector)
df_result <- subset(df, group %in% df_subset$group)
편집 한
library(microbenchmark)
microbenchmark(
dplyr_test= df %>%
group_by(group) %>%
filter(any(person %in% search_vector)),
base= df[ave(df$person %in% search_vector, df$group, FUN=any),],
convoluted = df[df$group %in% df$group[df$person %in% search_vector],],
times = 100
)
Unit: microseconds
expr min lq mean median uq max neval
dplyr_test 3191.893 3433.7885 3736.42618 3649.4145 3991.2770 5017.041 100
base 131.175 150.0395 193.04807 184.2435 224.6185 367.780 100
convoluted 43.726 52.0120 68.80326 61.0035 86.0395 123.770 100
모든 답변이 문제를 해결할 때 정확하게 정확한 예의는 무엇인지 모릅니다. 우아함은 개인의 취향에 달려 있지만, 벤치 마크는 @Abdou의 대답에 따른 효율성 이점을 나타냅니다. 그러므로 나는 그의 대답을 받아 들인다. – user6617454