주어진 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
옵션이로 변환하는 것입니다 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] 삭제
몇 마디 만하겠습니다