代码之家  ›  专栏  ›  技术社区  ›  serenade

如何将列表中的项目表示为二进制?

  •  1
  • serenade  · 技术社区  · 9 年前

    我有5列数据(ID,Q_1,Q_2,Q_3,Q_4)。 ID栏有学生编号(122-127)。 Q_1列有学生答案(Q-1_A-4、Q-1_A-12…) Q_2栏有学生答案(Q_2_A-2、Q_2_A-3…) Q_3和Q4栏有学生答案(T,F)

    我想在R中创建一个矩阵。例如;对于每个ID,如果给出Q-1_A-4,则矩阵应包括1,如果未给出,则矩阵应该包括0。输入样本和所需输出样本如下所示。

    如果有人能帮我用R编写这个案例,我会很高兴的。谢谢

    输入:

    ID   Q_1        Q_2            Q_3      Q_4
    
    122  Q-1_A-4                   F         F          
    123  Q-1_A-4    Q-2_A-2        F         T  
    124  Q-1_A-35   Q-2_A-2        T         F  
    125  Q-1_A-14   Q-2_A-4        F         T  
    126  Q-1_A-14   Q-2_A-2        F         F  
    127  Q-1_A-4    Q-2_A-3        F         F  
    

    期望输出:

    ID   Q-1_A-4    Q-1_A-14   Q-1_A-35   Q-2_A-2    Q-2_A-4  .....
    
    122  1          0              0         0         0
    123  1          0              0         1         0 
    124  0          0              1         1         0 
    125  0          1              0         0         1  
    126  0          1              0         1         0
    127  1          0              0         0         0 
    
    1 回复  |  直到 9 年前
        1
  •  1
  •   akrun    9 年前

    我们可以使用 mtabulate 从…起 library(qdapTools)

    library(qdapTools)
    d1 <- mtabulate(as.data.frame(t(df1[-1])))
    `row.names<-`(cbind(df1[1],d1[grep("^Q", names(d1))]), NULL)
    #   ID Q-1_A-4 Q-2_A-2 Q-1_A-35 Q-1_A-14 Q-2_A-4 Q-2_A-3
    #1 122       1       0        0        0       0       0
    #2 123       1       1        0        0       0       0
    #3 124       0       1        1        0       0       0
    #4 125       0       0        0        1       1       0
    #5 126       0       1        0        1       0       0
    #6 127       1       0        0        0       0       1
    

    数据

    df1 <- structure(list(ID = 122:127, Q_1 = c("Q-1_A-4", 
     "Q-1_A-4", "Q-1_A-35", 
    "Q-1_A-14", "Q-1_A-14", "Q-1_A-4"), Q_2 = c("", 
    "Q-2_A-2", "Q-2_A-2", 
    "Q-2_A-4", "Q-2_A-2", "Q-2_A-3"), Q_3 = c(FALSE, FALSE, 
     TRUE, 
    FALSE, FALSE, FALSE), Q_4 = c(FALSE, TRUE, FALSE, TRUE, FALSE, 
    FALSE)), .Names = c("ID", "Q_1", "Q_2", "Q_3", "Q_4"), 
    class = "data.frame", row.names = c(NA, -6L))