dplyr을 사용하여 그룹화 된 데이터에서 값이 발생하는 경우 누락되지 않은 값 채우기

EML

주어진 ID에 대해 "예"가 연도에 있으면 모든 값을 "예"로 변환하고 모든 연도에 "아니오"만 있으면 값을 "아니오"로 변환하고 싶습니다. 다음은 그 예입니다.

data <- data.frame(
  id=c(1,1,2,2,3,3,4,4,5,5),
  year=rep(c(2010, 2011), 5),
  employ=c("yes", "yes", "no", "yes", "yes", "no", NA, "yes", "no", NA))

> data
   id year employ
1   1 2010    yes
2   1 2011    yes
3   2 2010     no
4   2 2011    yes
5   3 2010    yes
6   3 2011     no
7   4 2010   <NA>
8   4 2011    yes
9   5 2010     no
10  5 2011   <NA>

원하는 출력 :

data2 <- data.frame(
  id=c(1,1,2,2,3,3,4,4,5,5),
  year=c(2010, 2011, 2010, 2011, 2010, 2011, 2010, 2011, 2010, 2011),
  employ=c("yes", "yes", "yes", "yes", "yes", "yes","yes", "yes","no", "no"))

> data2
   id year employ
1   1 2010    yes
2   1 2011    yes
3   2 2010    yes
4   2 2011    yes
5   3 2010    yes
6   3 2011    yes
7   4 2010    yes
8   4 2011    yes
9   5 2010     no
10  5 2011     no
Akrun

옵션이로 변환하는 것입니다 factor와 함께 levels첫 번째 지정된 선택 level를 삭제 한 후levels

library(dplyr)
data %>%
   group_by(id) %>%
   mutate(employ = levels(droplevels(factor(employ, 
         levels = c('yes', 'no'))))[1]) %>%
   ungroup

-산출

# A tibble: 10 x 3
#      id  year employ
#   <dbl> <dbl> <chr> 
# 1     1  2010 yes   
# 2     1  2011 yes   
# 3     2  2010 yes   
# 4     2  2011 yes   
# 5     3  2010 yes   
# 6     3  2011 yes   
# 7     4  2010 yes   
# 8     4  2011 yes   
# 9     5  2010 no    
#10     5  2011 no    

NA특정 'id'에 대한 모든 것이 있으면 다음을 반환합니다.NA


또는 조건을 if/else

data %>%
   group_by(id) %>% 
   mutate(employ = if('yes' %in% employ) 'yes' else 'no') %>%
   ungroup

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

Related 관련 기사

뜨겁다태그

보관