我试图匹配两列字符串数据,其中一列比另一列多。
当前数据如下:
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
最有效的方法是什么?感谢。
答案 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"