当前在Azure中使用R。我正试图在我的数据帧中创建一个新列,它的值依赖于现有的列(“Sum of Pillar”。
->WithSumIDAPillars <- maml.mapInputPort(1)
->WithSumIDAPillars"newcolumn“<- NA
->WithSumIDAPillars$newcolumn <- if (WithSumIDAPillars$Sum of Pillar <5 ="Low";WithSumIDAPillars$Sum of Pillar <=6<=10 ="Medium";WithSumIDAPillars$Sum of Pillar <=11<=16 ="High“
我需要创建一个新列来设置以下要求:如果"Sum of PIllar“值介于0-5=低,6-11=中,11-16=高。
发布于 2019-02-10 08:51:39
你用过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()
函数按顺序遍历每个case,直到~
左侧的一个表达式的计算结果为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/
希望这能有所帮助!
发布于 2019-02-10 20:03:47
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))))
注意-在你的上、中和下高阈值之间有一个重叠,所以我把高的下限提高到了12。
https://stackoverflow.com/questions/54612241
复制相似问题