我想创建一个由二进制文件组成的所谓匹配向量.除非元素属于同一个变量,否则所有数字都应为零.
这是一个例子:
dataset=("a","b","c","d","x","y","z")
var1=c("a","b","y","z")
var2=c("c","d","x")
Run Code Online (Sandbox Code Playgroud)
因此,我有一个包含第一行中所有变量的数据集.现在我创建了两个组:var1和var2.
元素"a"的匹配向量应该看起来像:
matching_a=c(1,1,0,0,0,1,1)
Run Code Online (Sandbox Code Playgroud)
这些数字对应于我的数据集.如果我的数据集中的变量位于同一组中,则匹配向量中应该为1,否则为0.
但是,我的实际数据集太大而无法手动执行.有谁知道我想做什么?
使用ifelse功能和%in%操作员.
matching_a <- ifelse(dataset %in% var1, 1, 0)
matching_a
# [1] 1 1 0 0 0 1 1
Run Code Online (Sandbox Code Playgroud)
> output1 = 1 * dataset %in% var1
> output2 = 1 * dataset %in% var2
> output1
[1] 1 1 0 0 0 1 1
> output2
[1] 0 0 1 1 1 0 0
Run Code Online (Sandbox Code Playgroud)
此外,如果你有更多的匹配要比var1和var2,将它扩展到如下所示是有用的:
> vars = list(var1, var2)
> 1 * sapply(vars, function(x) dataset %in% x)
[,1] [,2]
[1,] 1 0
[2,] 1 0
[3,] 0 1
[4,] 0 1
[5,] 0 1
[6,] 1 0
[7,] 1 0
Run Code Online (Sandbox Code Playgroud)