입력 데이터 프레임이 주어지면
library(dplyr)
( df <- data_frame(id = c(1,1,1,2,2,3), y = letters[1:6]) )
# # A tibble: 6 × 2
# id y
# <dbl> <chr>
# 1 1 a
# 2 1 b
# 3 1 c
# 4 2 d
# 5 2 e
# 6 3 f
하나의 부분 집합하고 싶어 가정 df[, c("id", "y")]
에만있는 가장 일반적인 두 가지 식별자와 id
1
과를 2
:
df %>% group_by(id) %>% tally %>% arrange(desc(n)) %>% head(2) %>% .$id %>% print -> ids #*
# [1] 1 2
질문 : 술어 함수 내부에 파이프를 사용하는 방법이 있습니까filter
의 정맥은 :
df %>% filter(
id %in% df %>% group_by(id) %>% tally %>% arrange(desc(n)) %>% head(2) %>% .$id )
# Error: no applicable method for 'group_by_' applied to an object of class "logical"
df %>% filter(
id %in% (df %>% group_by(id) %>% tally %>% arrange(desc(n)) %>% head(2) %>% .$id) )
# Error: cannot handle
df %>% filter(
id %in% {df %>% group_by(id) %>% tally %>% arrange(desc(n)) %>% head(2) %>% .$id} )
# Error: cannot handle
?
내 말은, 마지막 두 술어는 filter
다음 외부에서 예상대로 작동하는 것 같습니다 .
df$id %in% (df %>% group_by(id) %>% tally %>% arrange(desc(n)) %>% head(2) %>% .$id)
# [1] TRUE TRUE TRUE TRUE TRUE FALSE
df$id %in% {df %>% group_by(id) %>% tally %>% arrange(desc(n)) %>% head(2) %>% .$id}
# [1] TRUE TRUE TRUE TRUE TRUE FALSE
참고 : 임시 변수를 사용할 수 있다는 것을 알고 있습니다 ids
.
df %>% filter(id %in% ids) # *ids <- c(1,2)
또는 사용할 수 있습니다 *_join
.
df %>% inner_join(
df %>% group_by(id) %>% tally %>% arrange(desc(n)) %>% head(2) %>% select(-n))
둘 다 예상 출력을 산출합니다 .
# # A tibble: 5 × 2
# id y
# <dbl> <chr>
# 1 1 a
# 2 1 b
# 3 1 c
# 4 2 d
# 5 2 e
그 자체로 이것을 복잡하게 만들지 마십시오.
ids <- (df %>% count(id) %>% arrange(n) %>% tail(2))$id
filter(df, id %in% ids)
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다