我正在尝试将一列的值与其他几列进行匹配,并创建一个逻辑矩阵,该矩阵包含FIRST匹配为TRUE以及所有其他值为FALSE。
例如,使用以下数据:
var1 <- c("bush", "tree", "tree", "rock")
var2 <- c("tree", "bush", "rock", "rock")
var3 <- c("rock", "tree", "tree", "rock")
var4 <- c("rock", "tree", "tree", "tree")
var5 <- c("bush", "bush", "rock", "tree")
search_term <- c("tree", "tree", "bush", "tree")
df <- data.frame(var1, var2, var3, var4, var5, search_term, stringsAsFactors = FALSE)
> df
var1 var2 var3 var4 var5 search_term
1 bush tree rock rock bush tree
2 tree bush tree tree bush tree
3 tree rock tree tree rock bush
4 rock rock rock tree tree tree
我想在var1-var5中寻找“ search_term”,并最终为第一个值创建一个逻辑矩阵,对其他值创建为FALSE。
这样做:
df[, 1:5] == df$search_term
对于所有匹配项,均使用TRUE生成逻辑矩阵:
var1 var2 var3 var4 var5
[1,] FALSE TRUE FALSE FALSE FALSE
[2,] TRUE FALSE TRUE TRUE FALSE
[3,] FALSE FALSE FALSE FALSE FALSE
[4,] FALSE FALSE FALSE TRUE TRUE
我想要得到的是这样的东西,仅在第一个比赛中才为TRUE:
var1 var2 var3 var4 var5
[1,] FALSE TRUE FALSE FALSE FALSE
[2,] TRUE FALSE FALSE FALSE FALSE
[3,] FALSE FALSE FALSE FALSE FALSE
[4,] FALSE FALSE FALSE TRUE FALSE
提前致谢!
如果您只想让该first
条目为真
t(apply(df[,1:5]==df$search_term, 1, function(x) {
x[which(x)[-1]] <- FALSE
x}))
# var1 var2 var3 var4 var5
#[1,] FALSE TRUE FALSE FALSE FALSE
#[2,] TRUE FALSE FALSE FALSE FALSE
#[3,] FALSE FALSE FALSE FALSE FALSE
#[4,] FALSE FALSE FALSE TRUE FALSE
另一种选择是
indx <- df[1:5]==df$search_term
indx1 <- !indx+1
indx1[cbind(1:nrow(df), max.col(indx,'first')*!!rowSums(indx))] <- TRUE
indx1
# var1 var2 var3 var4 var5
#[1,] FALSE TRUE FALSE FALSE FALSE
#[2,] TRUE FALSE FALSE FALSE FALSE
#[3,] FALSE FALSE FALSE FALSE FALSE
#[4,] FALSE FALSE FALSE TRUE FALSE
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句