【问题标题】:Add new variable created with mutate_ to data frame instead of creating a tibble将使用 mutate_ 创建的新变量添加到数据框而不是创建 tibble
【发布时间】:2019-11-03 21:21:59
【问题描述】:

我尝试使用 mutate 向数据框中添加新列给了我一个新变量的小标题,但没有将变量添加为数据框中的新列(这是我想要做的)。

我有一个带有字符变量 DRUG_GENERIC_NAME 的数据框,并通过组合 mutate 和 str_detect 创建了一个新的逻辑变量 Ibuprofen,当 IBUPROFEN 包含在 DRUG_GENERIC_NAME 中时,它将是 TRUE

mutate(Drug_Table, DRUG_GENERIC_NAME, Ibuprofen = str_detect (Drug_Table$DRUG_GENERIC_NAME,"IBUPROFEN", negate = FALSE))

结果是一个带有新变量 Ibuprofen 的 tibble,但代码没有将变量添加到数据框 Drug_Table。如何使用此代码将新变量添加到数据框而不是创建 tibble?

【问题讨论】:

  • 将结果赋回原始数据框的名称:Drug_Table <- mutate(...
  • 如果你将结果分配回去,它仍然会被转换为一个 tibble(一个 tibble 只是一个稍微修改过的数据帧,并且在 95% 的时间里工作完全相同)。使用mutate() 时没有真正的解决方法,您可能只需要习惯使用 tibbles 的想法。

标签: r dplyr


【解决方案1】:

如果我们不想用<- 重新分配它,我们可以使用来自magrittr 的复合赋值运算符(%<>%

library(magrittr)
Drug_Table %<>%
   mutate(Ibuprofen = str_detect(DRUG_GENERIC_NAME,"IBUPROFEN", negate = FALSE))

【讨论】:

    【解决方案2】:

    正如你提出的 Calum,你必须使用“

    Drug_Table <- mutate(Drug_Table, DRUG_GENERIC_NAME, Ibuprofen = str_detect (Drug_Table$DRUG_GENERIC_NAME,"IBUPROFEN", negate = FALSE))
    

    如果您需要数据框仍然是 data.frame(而不是 tibble),请使用 as.data.frame()

    Drug_Table <- as.data.frame(mutate(Drug_Table, DRUG_GENERIC_NAME, Ibuprofen = str_detect (Drug_Table$DRUG_GENERIC_NAME,"IBUPROFEN", negate = FALSE)))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-06-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-02
      • 1970-01-01
      • 1970-01-01
      • 2021-06-08
      相关资源
      最近更新 更多