r按列和行匹配字符串数据

时间:2016-08-21 22:37:35

标签: 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

最有效的方法是什么?感谢。

2 个答案:

答案 0 :(得分: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)

答案 1 :(得分: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"