有没有一种方法可以根据条件向R添加新列

时间:2019-02-10 00:30:07

标签: r azure

当前在Azure中使用R。我正在尝试在数据框中创建一个新列,该列的值取决于现有列(“支柱总和”。

-> WithSumIDAPillars <-maml.mapInputPort(1)

-> WithSumIDAPillars [“ newcolumn”] <-不适用

-> WithSumIDAPillars $ newcolumn <-if(WithSumIDAPillars $支柱的总和<5 =“低”; WithSumIDAPillars $支柱的总和<= 6 <= 10 =“ Medium”; WithSumIDAPillars $支柱的总和<= 11 <= 16 =“高”

我需要创建一个新列来设置以下要求: 如果“总和”值介于0-5 =低,6-11 =中和11-16 =高之间。

enter image description here

2 个答案:

答案 0 :(得分:0)

您使用过dplyr软件包吗?这样的东西行吗?

library("dplyr")

WithSumIDAPillars$newcolumn <- 
  case_when(
    WithSumIDAPillars$`Sum of Pillar` <= 6 ~ "Low",
    WithSumIDAPillars$`Sum of Pillar` <= 11 ~ "Medium",
    WithSumIDAPillars$`Sum of Pillar` <= 16 ~ "High",
    TRUE ~ NA_character_
  )

case_when()函数会依次遍历每种情况,直到~左侧的一个表达式的计算结果为TRUE,因此将最后一个语句用作默认值

根据您的应用程序,使用下划线可以更轻松地为列sum_of_pillar命名。这样可以更轻松地使用管道(%>%mutate()函数来更简洁地编写内容:

WithSumIDAPillars <- 
  WithSumIDAPillars %>%
  mutate(
    newcolumn = case_when(
      sum_of_pillar <=  5 ~ "Low",
      sum_of_pillar <= 11 ~ "Medium",
      sum_of_pillar <= 16 ~ "High",
      TRUE ~ NA_character_
    )
  )

要了解有关dplyr的更多信息,可以访问以下网站:https://dplyr.tidyverse.org/或(免费的)R for Data Science书籍:https://r4ds.had.co.nz/

希望这会有所帮助!

答案 1 :(得分:0)

case_when的另一种方法(也许不太优雅)是使用嵌套的if_else语句。也许一个优点是您不必像使用case_when那样过多地关注顺序或语句。

library(tidyverse)

WithSumIDAPillars %>%
    mutate(new_col = if_else(`Sum of the Pillar` >= 0 & <= 5, "Low",
                             if_else(`Sum of the Pillar` >= 6 & <= 11, "Medium",
                                     if_else(`Sum of the Pillar` >= 12 & <= 18, "High",
                                             NA))))

NB-您的中阈值上限和下阈值上限之间有重叠,因此我将下阈值的上限提高到了12。