当前在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 =高之间。
答案 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。