2016-09-16 1 views
1

Date, AgeCustomer_ID의 데이터 세트가 있습니다. Age의 행 중 일부에 누락 값 (NAs)이있어 그 값을 전가하고 싶습니다. 나는 30 ~ 35과 Age에 NAS를 대체하려는NA를 인접한 행에서 중복으로 바꾸기 R

Date <- c("201101", "201102", "201101", "201102", "201103") 
Age <- c("12-17", "12-17", "30-35", NA, NA) 
Customer_ID <- c("1234", "1234", "5678", "5678", "5678") 
df <- data.frame(Date, Age, Customer_ID) 

Date  Age  Customer_ID 
201101 12-17 1234 
201102 12-17 1234 
201101 30-35 5678 
201102 NA  5678 
201103 NA  5678 

: 여기

몇 가지 예를 들어 데이터입니다.

따라서 모든 NA의 경우 동일한 Customer_ID을 가진 다른 행이 있는지 확인하고 NA를 다른 행에 표시된 Age의 값으로 바꿔야합니다.

방법에 대한 아이디어가 있으십니까? 감사.

+0

동일한 고객 ID를 가진 다른 행이 있다면 어떻게 될까요? –

+0

@SamFirke 당신이 맞습니다, 링크 주셔서 감사합니다. – kiae

답변

1

에서 fill 기능을 사용할 수 있습니다. 그것은 에 대한 tidyr 함수이며, 마지막 관찰은으로 전달됩니다. 즉, NA 값을 이전의 비 NA 값으로 채 웁니다. 기본 R로

library(dplyr) 
library(tidyr) 
df %>% arrange(Age) %>% group_by(Customer_ID) %>% fill(Age) 

# Source: local data frame [5 x 3] 
# Groups: Customer_ID [2] 

#  Date Age Customer_ID 
# <fctr> <fctr> <fctr> 
# 1 201101 12-17 1234 
# 2 201102 12-17 1234 
# 3 201101 30-35 5678 
# 4 201102 30-35 5678 
# 5 201103 30-35 5678 
1

:

를 위해이 작업을 위해, 당신은 비의 NA 뒤에 NA 값을 정렬합니다 2 열을 정렬 할 arrange를 사용하여 다음 고객 ID별로 그룹과는 Age 열을 채울 수에서
lookup <- unique(df[!is.na(df$Age),][c('Customer_ID', 'Age')]) 
df[is.na(df$Age),]$Age <- lookup[match(df[is.na(df$Age),]$Customer_ID, 
               lookup$Customer_ID),]$Age 
관련 문제