【问题标题】:How to create dichotomous variables based on some factors in r?如何根据 r 中的某些因素创建二分变量?
【发布时间】:2016-07-14 17:39:28
【问题描述】:

初始数据框为:

Factor1   Factor2   Factor3
  A           B        C
  B           C        NA
  A           NA       NA
  B            C        D
  E           NA       NA

我想根据上述因子变量创建 5 个二分变量。规则应该是如果Factor1Factor2Factor3 包含A,则新变量A 将得到1,否则A 应该为0,依此类推。新创建的变量应如下所示:

A    B    C    D    E
1    1    1    0    0
0    1    1    0    0
1    0    0    0    0
0    1    1    1    0
0    0    0    0    1

【问题讨论】:

    标签: r


    【解决方案1】:

    我们可以使用table 来执行此操作。我们用列数复制行序列,unlist 数据集并得到值的频率。

    table(rep(1:nrow(df1), ncol(df1)), unlist(df1))
    #    A B C D E
    #  1 1 1 1 0 0
    #  2 0 1 1 0 0
    #  3 1 0 0 0 0
    #  4 0 1 1 1 0
    #  5 0 0 0 0 1
    

    如果我们每行有超过 1 个值,则转换为逻辑值,然后将其重新转换回二进制。

     +(!!table(rep(1:nrow(df1), ncol(df1)), unlist(df1)))
    

    数据

    df1 <- structure(list(Factor1 = c("A", "B", "A", "B", "E"),
     Factor2 = c("B", 
    "C", NA, "C", NA), Factor3 = c("C", NA, NA, "D", NA)), 
     .Names = c("Factor1", 
     "Factor2", "Factor3"), class = "data.frame", row.names = c(NA, -5L))
    

    【讨论】:

    • 谢谢阿克伦。答案看起来不错。但是,当我将结果另存为 df2 时,它成为类表的对象,当我通过 as.data.frame(df2) 将其转换为数据框时,结果的格式发生了变化。如何将结果存储为数据框(比如 df2),以便 A B C D E 成为 df2 的变量名?
    • @AmirulIslam 您可以使用as.data.frame(as.matrix(table( 或将其压缩为as.data.frame.matrix(table(rep(1:nrow(df1), ncol(df1)), unlist(df1)))
    • @akrun, as.data.frame.matrix(table(rep(1:nrow(df1), ncol(df1)), unlist(df1))) 工作正常。
    猜你喜欢
    • 2022-10-14
    • 1970-01-01
    • 2020-10-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多