【问题标题】:Recode string into a binary matrix将字符串重新编码为二进制矩阵
【发布时间】:2017-11-02 19:42:55
【问题描述】:

我想将一些字符串重新编码为二进制模式,以便在 R 中将它们编码为矩阵。假设我在数据框中有以下字符串:

strings  code
ABC       1
BCA       2
CAB       1

提取它们后,我有以下字符串:

“ABC” “BCA” “驾驶室”

我想实现下一个转换:

A = 100
B = 010
C = 001

这样将“ABC”转换为下一个矩阵

100
010
001

于是,“BCA”变成了:

010
001
100

和“CAB”成:

001
100
010

并且,经过这个转换,得到一个“ABC”的向量,即:

100010001

代表ABC,以此类推。

基本上,我想做的是为字母字符定义一个带有二进制字典的算法,以便它使用 R 将每个字母转换为二进制序列。

我尝试了一些方法,但无法获得好的功能...

有什么帮助吗?

【问题讨论】:

    标签: r matrix binary


    【解决方案1】:

    制作一个命名向量,然后拆分匹配。

    dictionary <- setNames(c("100", "010", "001"), LETTERS[1:3])
    
    x <- c("ABC", "BCA", "CAB")
    
    sapply(strsplit(x, ""), function(i)
      paste(dictionary[ i ], collapse = ""))
    
    # [1] "100010001" "010001100" "001100010"
    

    或者不创建自定义字典,为什么不使用真正的二进制文件?

    sapply(x, function(i)
      paste(rawToBits(charToRaw(i)), collapse = ""))
    
    # ABC 
    # "010000000000010000010000000001000101000000000100" 
    # BCA 
    # "000100000000010001010000000001000100000000000100" 
    # CAB 
    # "010100000000010001000000000001000001000000000100"
    

    【讨论】:

      【解决方案2】:

      我们可以使用gsub。创建一个键/值list('lst'),遍历'lst'的序列,使用gsub匹配'lst'的names,替换为'value'并赋值给“字符串”列

      lst <- list(A = '100', B = '010', C = '001')
      for(i in seq_along(lst)) df1$strings <- gsub(names(lst)[[i]], lst[[i]], df1$strings)
      df1
      #    strings code
      #1 100010001    1
      #2 010001100    2
      #3 001100010    1
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-07-05
        • 2020-01-03
        • 1970-01-01
        • 2016-07-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-01-23
        相关资源
        最近更新 更多