【问题标题】:How to create a binary vector with 1 if elements are part of the same vector?如果元素是同一向量的一部分,如何创建具有 1 的二进制向量?
【发布时间】:2011-12-22 17:25:36
【问题描述】:

我想创建一个由二进制文件组成的所谓匹配向量。除非元素属于同一个变量,否则所有数字都应为零。

这是一个例子:

dataset=("a","b","c","d","x","y","z")
var1=c("a","b","y","z")
var2=c("c","d","x")

因此,我有一个数据集,其中包含第一行中的所有变量。现在我创建了两个组:var1 和 var2。

元素“a”的匹配向量应该是这样的:

matching_a=c(1,1,0,0,0,1,1)

数字对应于我的数据集。如果我的数据集中的变量在同一个组中,我的匹配向量中应该有 1,否则为 0。

但是,我的实际数据集太大而无法手动完成。有人明白我想做什么吗?

【问题讨论】:

    标签: r binary matching


    【解决方案1】:

    我使用 John 的上述方法(和 Max 的解决方案)的轻微变化来生成一个“二进制向量”列表(用于多个匹配项),如下所示:

    library("plyr")
    
    dataset<-c("a","b","c","d","x","y","z")
    var1<-c("a","b","y","z")
    var2<-c("c","d","x")
    vars <- list(var1, var2)
    
    binaryLst <- lapply(vars ,function(x){ifelse(dataset %in% x, 1, 0)})
    

    输出:

    > binaryLst
    [[1]]
    [1] 1 1 0 0 0 1 1
    
    [[2]]
    [1] 0 0 1 1 1 0 0
    

    【讨论】:

      【解决方案2】:

      我看到 John Colby 已经采取了我要建议的方式,但我想我会更明确地说明。

      二元函数%in% 返回一个逻辑向量并乘以 1 强制转换为 "numeric" 模式。这也可以通过:

      matching_a <- as.numeric(dataset %in% x) # Or
      
      matching_a <- 0 + (dataset %in% x)
      

      您还应该查看?match 函数所基于的%in%

      【讨论】:

        【解决方案3】:

        使用ifelse 函数和%in% 运算符。

        matching_a <-  ifelse(dataset %in% var1, 1, 0)
        
        matching_a
        # [1] 1 1 0 0 0 1 1
        

        【讨论】:

          【解决方案4】:
          > 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
          

          此外,如果您要进行的匹配比 var1var2 多,则将其扩展为以下内容会很有用:

          > 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
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2012-04-01
            相关资源
            最近更新 更多