首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何添加6个类别的新列?

如何添加6个类别的新列?
EN

Stack Overflow用户
提问于 2021-05-16 01:06:14
回答 1查看 254关注 0票数 0
代码语言:javascript
复制
library(tidyverse)
library(lubridate)
daily_aqi <- read_csv("data/akl-aqi19.csv")
aqi_cat <- fct_inorder(c("Good", "Moderate", "Unhealthy for Sensitive",
  "Unhealthy", "Very Unhealthy", "Hazardous"))
aqi_pal <- setNames(
  c("#00E400", "#FFFF00", "#FF7E00", "#FF0000", "#8F3F97", "#7E0023"),
  aqi_cat)

如何完成步骤1-3:

  1. 添加一个新列,然后添加6个类别,同时还通过max_aqi
  2. 添加列月份,从日期
  3. 提取月份,从日期

中提取日期添加列mday。

向daily_aqi中添加3个新列:

Hazardous

  • month:
  1. aqi_cat:将max_aqi分为6类:0到50:好51到100:中度101到150:不健康对敏感的151到200:不健康201到300:非常不健康的301和更高:max_aqi提取月份
  2. mday:提取月

EN

回答 1

Stack Overflow用户

发布于 2021-05-16 01:12:55

我们可以使用cut根据'max_aqi‘的值创建新的类别,可以使用format从'date’列创建'month‘和'mday’

代码语言:javascript
复制
library(dplyr)
daily_aqi <- daily_aqi %>%
    mutate(aqi_cat = cut(max_aqi, breaks = c(-Inf, 50, 100, 150, 200, 300, Inf),
       labels = c("Good", "Moderate", "Unhealthy for Sensitive",
            "Unhealthy", "Very Unhealthy", "Hazardous")),
   month = format(date, '%b'), mday = as.integer(format(date, '%d')))

-output

代码语言:javascript
复制
daily_aqi
#         date max_aqi                 aqi_cat month mday
#1  2019-01-01      35                    Good   Jan    1
#2  2019-01-02       0                    Good   Jan    2
#3  2019-01-03      50                    Good   Jan    3
#4  2019-01-04      51                Moderate   Jan    4
#5  2019-01-05     101 Unhealthy for Sensitive   Jan    5
#6  2019-01-06     198               Unhealthy   Jan    6
#7  2019-01-07     201          Very Unhealthy   Jan    7
#8  2019-01-08     300          Very Unhealthy   Jan    8
#9  2019-01-09     301               Hazardous   Jan    9
#10 2019-01-10     350               Hazardous   Jan   10

或者使用case_when

代码语言:javascript
复制
daily_aqi <- daily_aqi %>%
       mutate(aqi_cat = case_when(between(max_aqi, 0, 50)~ 'Good',
                  between(max_aqi, 51, 100)~ 'Moderate',
                  between(max_aqi, 101 150) ~ 'Unhealthy for Sensitive',
                  between(max_aqi, 151, 200) ~ 'Unhealthy',
                  between(max_aqi, 201, 300) ~ 'Very Unhealthy',
                  max_aqi > 300 ~ 'Hazardous'),
              month = format(date, '%b'), mday = as.integer(format(date, '%d')))

数据

代码语言:javascript
复制
daily_aqi <- structure(list(date = structure(17897:17906, class = "Date"), 
    max_aqi = c(35, 0, 50, 51, 101, 198, 201, 300, 301, 350)), 
    class = "data.frame", row.names = c(NA, 
-10L))
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67552408

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档