【问题标题】:Combine several multiple binary variables into 1 in R在R中将几个多个二进制变量组合成1
【发布时间】:2020-03-03 14:44:25
【问题描述】:

故事如下:

我有一个包含许多二进制变量的数据集(1 = 是,0 = 否)。问题是其中许多变量是相同的,只是写法不同。 示例:

  • 双胞胎
    • 格梅利
    • DCDA
    • MCDA
    • 双 DCDA
    • 双 MCDA
    • ...

这完全取决于医生/他的习惯/他的心情/他的读写能力。如果上述任何变量的观察结果为“1”,则意味着将有双胞胎(怀孕)。现在要对双胞胎做出一些预测和资料,我需要将所有那些在任何可能的变量(有时甚至是其中的 2 个)中具有“1”的观察结果分组。

这是我尝试过的:

features <- mutate(features,
                   TWIN_P = ifelse("twins" == 1 |
                                      "gemelli" == 1 |
                                      "DCDA" == 1 |
                                      "MCDA" == 1 |
                                      "twin DCDA" == 1 |
                                      "twin MCDA" == 1 , 
                                      "1", "0"))

但是当我查看新变量 TWIN_P 时,我得到了 0 个双胞胎……这当然是不可能的。

谁能告诉我我做错了什么?二进制变量是数字的。我试图在“”之间或没有它们之间执行此操作。但没有什么真正奏效。

提前致谢!

【问题讨论】:

  • 不要引用变量名。您可以使用反引号 `` 来表示带有空格的。

标签: r if-statement dplyr


【解决方案1】:

我不确定你的数据框到底是什么样子,所以这里是一个替身:

twins <- rbinom(n=10, size=1, prob=0.2) 
gemelli <- rbinom(n=10, size=1, prob=0.2)
DCDA <- rbinom(n=10, size=1, prob=0.2)
MCDA <- rbinom(n=10, size=1, prob=0.2)
twin_DCDA <- rbinom(n=10, size=1, prob=0.2)
twin_MCDA <- rbinom(n=10, size=1, prob=0.2)

df1 <- data.frame(twins, gemelli, DCDA, MCDA, twin_DCDA, twin_MCDA)

然后rowSums对那些大于0,这将输出TRUEFALSE。将其放入as.integer 中,这会将TRUE/FALSE 转换为01

df1 %>% 
  mutate(
    TWIN_P = as.integer(rowSums(.)>0)
  )

【讨论】:

    【解决方案2】:

    正如@Edward 所提到的 - 不要引用变量名。由于你有两个带空格的变量名,你可以使用反引号:`twin DCDA` 通常,你应该尽量避免列名中有空格。

    此外,这是另一种使用基数 R 来检查列值是否为 1 的方法:

    set.seed(123)
    
    df <- data.frame(matrix(rbinom(36, 1, .1), ncol = 6))
    colnames(df) = c('twins', 'gemelli', 'DCDA', 'MCDA', 'twin DCDA', 'twin MCDA')
    
    cbind(df, TWIN_P = as.numeric(apply(df, 1, function(x) any(x == 1))))
    

    输出

      twins gemelli DCDA MCDA twin DCDA twin MCDA TWIN_P
    1     0       0    0    0         0         1      1
    2     0       0    0    1         0         1      1
    3     0       0    0    0         0         0      0
    4     0       0    0    0         0         0      0
    5     1       1    0    0         0         0      1
    6     0       0    0    1         0         0      1
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-07-11
      • 2022-08-13
      • 1970-01-01
      • 1970-01-01
      • 2015-01-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多