2016-05-24 8 views
0

df1$colBの値をdf2$replacementの値で置き換えます。df1$colBdf2$matchesです。2番目のデータフレームに一致する値が存在する場合、データフレーム列の値を置き換えます。

df1 <- data.frame(colA = 1:10, colB = letters[1:10]) 

df2 <- data.frame(matches= letters[4:1], replacement= LETTERS [4:1]) 

結果はdf3次のようになります。

df3 <- data.frame(colA =1:10, colB = c(LETTERS[1:4],letters[5:10])) 

私はこのタスクのためのループソリューションを避けるためにしたいと思います。

答えて

3

あなたはによると、ベースR.に

# read in data with character vectors, not factors 
df1 <- data.frame(colA = 1:10, colB = letters[1:10], stringsAsFactors=F) 
df2 <- data.frame(matches= letters[4:1], replacement= LETTERS [4:1], stringsAsFactors=F) 
df3 <- data.frame(colA =1:10, colB = c(LETTERS[1:4],letters[5:10]), stringsAsFactors=F) 

# replace the characters with the desired characters 
df1$colB <- chartr(paste(df2$matches, collapse=""), 
        paste(df2$replacement, collapse=""), df1$colB) 

chartr機能を使用することができますヘルプファイル `?chartr、関数

文字ベクトルの文字を翻訳する

3

あなたがdf1df2mergeを行い、その後、replacementcolB値を置き換えることができます。

library(dplyr) 
merge(df1, df2, by.x = "colB", by.y = "matches", all.x = T) %>% 
    mutate(colB = ifelse(!is.na(replacement), replacement, colB)) %>% 
    select(colA, colB) 
    colA colB 
1  1 A 
2  2 B 
3  3 C 
4  4 D 
5  5 e 
6  6 f 
7  7 g 
8  8 h 
9  9 i 
10 10 j 
関連する問題