2017-11-30 5 views
0

私は2つのdata.frame持っている:私は$市内の各値がB $市に存在するかどうかを見たいのですが値は、その後data.frameに存在している場合...(R)

A <- c("name", "city", "code") 
B <- c("code", "city") 

をし、ここではA. の新しい列に対応するB $コード値を報告するため、その場合には、私がやったことです:

その後
A$code <- "" 
found <- is.element(A$city, B$city) 

、どのように私は、if文を実行する必要がありますか?

+2

これらは原子ベクトルです。 –

+0

これは本質的にマージ/ジョイン操作です。あなたは 'city'で参加し、' B'から 'code'だけを残したいと思っています。 '[r] left join'の検索は – thelatemail

答えて

1

あなたは%in%オペレータを探しています。ここreprexです:

library('tidyverse') 

A <- tribble(
    ~name, ~city, ~code, 
    'foo', 'newark', '', 
    'bar', 'philly', '', 
    'fighter', 'sf', '' 
) 

B <- tribble(
    ~code, ~city, 
    'X', 'philly', 
    'Y', 'newark' 
) 

A = A %>% 
    mutate(code = ifelse(city %in% B$city, B$code, NA)) 

A 

#> # A tibble: 3 x 3 
#>  name city code 
#>  <chr> <chr> <chr> 
#> 1  foo newark  X 
#> 2  bar philly  Y 
#> 3 fighter  sf <NA> 

私は何かが欠けていた場合、私に教えてください。 ifelse機能のNA""などと置き換えることができます。

+1

または' A%>%left_join(select(B、city、code)、by = "city") 'です。そして、あなたはNULLをベクトルに入れることができないので、 'NA'を' NULL'で置き換えることはできません。 – thelatemail

+0

良いキャッチre:NULL、@thelatemail。 – everetr

+0

私はthelatemail 1を試しました:それは働いた!どうもありがとう! – sarovasta

関連する問題