2016-12-12 8 views
1

2つのテーブルが結合されています。結合後、値のいくつかはNAとして出力されます。NAの値を結合するには

私は第3のデータセットで再び参加しようとしていますが、それらのNA値でのみ参加します。どうすればいいのですか?

入社結果

library(plyr) 

## first table 
original_value <- c('old_a', 'old_b', 'old_c', 'old_d') 
key <- c('a', 'b', 'c', 'd') 
data <- data.frame(key, original_value, stringsAsFactors = FALSE) 

## lookup table 
new_value <- c('new_a', 'new_b') 
key <- c('a', 'b') 
lookup <- data.frame(key, new_value, stringsAsFactors = FALSE) 

## the joined data 
data_lookup_joined <- join(data, lookup, by = "key") 

> data_lookup_joined 
    key original_value new_value 
1 a   old_a  new_a 
2 b   old_b  new_b 
3 c   old_c  <NA> 
4 d   old_d  <NA> 

これは私が取得しようとしています出力されます:

## a third data set to join the NA values 
unmatched_value <- c('unmatched_c', 'unmatched_d') 
key <- c('c', 'd') 
unmatched_lookup <- data.frame(key, unmatched_value, stringsAsFactors = FALSE) 

key original_value new_value 
1 a   old_a  new_a 
2 b   old_b  new_b 
3 c   old_c  unmatched_c 
4 d   old_d  unmatched_d 

これは私が働かなかったことしようとしたものです。

data_lookup_joined$new_value [is.na(data_lookup_joined$new_value)] <- join(data_lookup_joined, unmatched_lookup, by = "key") 

何をする必要がありますか?もちろん

答えて

0
# join the rows with missing values 
has_na = is.na(data_lookup_joined$new_value) 
na_join = join(data_lookup_joined[has_na, c("key", "original_value")], unmatched_lookup) 
# make the column names match 
names(na_join)[3] = "new_value" 

# put it back together 
final_result = rbind(data_lookup_joined[!has_na, ], na_join) 

、簡単な方法はrbindlookupunmatched_lookup最初になり、その後、あなただけの1が参加する必要があります。

関連する問題