2016-08-21 14 views
-3

2つの列の文字列データが一致するようにしようとしています。r列と行による文字列データの一致

現在のデータは、次のようになります。

df <- data.frame("var1" = c('x','a', 'y','b','c','d', 'z'), 
         "var2" = c('x', 'y', 'z', '', '', '', '')) 
df 
    var1 var2 
1 x x 
2 a y 
3 y z 
4 b  
5 c  
6 d  
7 z  

、次のように私は、値が同じであるVAR1と一致するように、var2での行の注文をしたいと思いますが、彼らは一致しない場合0で満たされる:

所望の出力:

df 

    var1 var2 
1 x x 
2 a 0 
3 y y 
4 b 0 
5 c 0 
6 d 0 
7 z z 

は何だろうこれを行うことについて移動する最も効率的な方法は?ありがとう。

+1

ため個の方法は、彼らは '「0」 '文字列としてではなく、' 0 '整数/数字が入ります。 – thelatemail

+0

お役立ち情報ありがとう! – pyne

+1

dplyrを使用すると、 'df%>%mutate_all(as.character)%>%mutate(var2 = ifelse(var1%var2、var1、 '0'))' ... ' "0" ' – alistaire

答えて

2

あなたはifelsevar1var2

library(data.table) 
dt = setDT(df) 
dt[var1 %in% var2, var3 := var1][is.na(var3), var3 := "0"] 

dt 
# var1 var2 var3 
#1: x x x 
#2: a y 0 
#3: y z y 
#4: b   0 
#5: c   0 
#6: d   0 
#7: z   z 

内にある場合に基づいて新しい変数を作成したり使用することができます。

dt[,var2 := ifelse(var1 %in% var2, var1, "0")] 
dt 
# var1 var2 
# 1: x x 
# 2: a 0 
# 3: y y 
# 4: b 0 
# 5: c 0 
# 6: d 0 
# 7: z z 

データ

df <- data.frame("var1" = c('x','a', 'y','b','c','d', 'z'), 
       "var2" = c('x', 'y', 'z', '', '', '', ''), stringsAsFactors = F) 
+0

あなたの最初のものは、2番目が整数で値を埋めているので、最もうまくいくようです。ありがとう! – pyne

+0

元の列が係数変数の場合、整数になります。それを避けるべきである文字変数に変換してください。 – Psidom

+0

素晴らしい再度、感謝します! – pyne

0

我々は012を使用することができますがだけ知っているので、この

v1 <- with(df,var2[ match(var1, var2)]) 
df$var2 <- replace(v1, is.na(v1), 0) 
df$var2 
#[1] "x" "0" "y" "0" "0" "0" "z"