2016-08-21 75 views
-3

我想匹配兩列字符串數據,其中一列比另一列多。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  

而且我想在VAR2行訂單匹配VAR1其中值是相同的,但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%in%var2,var1,'0'))'...雖然'NA'可能比' 「0」' – alistaire

回答

2

您可以創建基於一個新的變量,如果var1是內var2

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 

或者使用ifelse

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

你的第一個似乎工作得最好,因爲第二個填充整數的值。謝謝! – pyne

+0

如果你的原始列是因子變量,它最終會是整數。將它轉換爲字符變量應該避免這種情況。 – Psidom

+0

太好了。再次感謝! – pyne

0

我們可以使用base R種方式完成本次

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"