暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

R数据处理|filter函数

337
点击关注了解更多哦

本期主要介绍dplyr[1]包的中filter() 函数相关用法,filter() (Subset rows using column values)
函数主要用于数据框的行筛选,是数据预处理过程中一个十分重要的函数。

1.读入数据

国家统计局[2]官网上关于2001-2020年我国31个省份人均GDP数据(未包含港澳台数据)为例,数据为面板形式。

> library(tidyverse)
> data <- readxl::read_xlsx("GDPdf.xlsx"
> head(data)
# A tibble: 6 x 4
  province region    year PerGDP
  <chr>    <chr>    <dbl>  <dbl>
1 北京     东部地区  2020 164889
2 天津     东部地区  2020 101614
3 河北     东部地区  2020  48564
4 山西     中部地区  2020  50528
5 内蒙     西部地区  2020  72062
6 辽宁     东北地区  2020  58872

2.数值型变量处理

针对数值型变量常用大于(>)
、小于(<)
、等于(==)
相关符号,注意等于为两个等号。

> data %>% filter(PerGDP > 100000 & year == 2020)
# A tibble: 6 x 4
  province region    year PerGDP
  <chr>    <chr>    <dbl>  <dbl>
1 北京     东部地区  2020 164889
2 天津     东部地区  2020 101614
3 上海     东部地区  2020 155768
4 江苏     东部地区  2020 121231
5 浙江     东部地区  2020 100620
6 福建     东部地区  2020 105818

> data %>% filter(PerGDP > 100000 & PerGDP < 120000 & year == 2020)
# A tibble: 3 x 4
  province region    year PerGDP
  <chr>    <chr>    <dbl>  <dbl>
1 天津     东部地区  2020 101614
2 浙江     东部地区  2020 100620
3 福建     东部地区  2020 105818

针对年份等连续型数值的筛选,可使用filter(var %in% start:end)
的形式进行筛选,简化代码量。如筛选出时间在2015-2020年的数据:

> data %>% filter(year %in% 2015:2020)
# A tibble: 186 x 4
   province region    year PerGDP
   <chr>    <chr>    <dbl>  <dbl>
 1 北京     东部地区  2020 164889
 2 天津     东部地区  2020 101614
 3 河北     东部地区  2020  48564
 4 山西     中部地区  2020  50528
 5 内蒙     西部地区  2020  72062
 6 辽宁     东北地区  2020  58872
 7 吉林     东北地区  2020  50800
 8 黑龙江   东北地区  2020  42635
 9 上海     东部地区  2020 155768
10 江苏     东部地区  2020 121231
# ... with 176 more rows
# i Use `print(n = ...)` to see more rows

或者使用filter(var %in% c(start:end))
形式:

> data %>% filter(year %in% c(2015:2020))
# A tibble: 186 x 4
   province region    year PerGDP
   <chr>    <chr>    <dbl>  <dbl>
 1 北京     东部地区  2020 164889
 2 天津     东部地区  2020 101614
 3 河北     东部地区  2020  48564
 4 山西     中部地区  2020  50528
 5 内蒙     西部地区  2020  72062
 6 辽宁     东北地区  2020  58872
 7 吉林     东北地区  2020  50800
 8 黑龙江   东北地区  2020  42635
 9 上海     东部地区  2020 155768
10 江苏     东部地区  2020 121231
# ... with 176 more rows
# i Use `print(n = ...)` to see more rows

3.字符型变量处理

单个条件

针对单个条件,常使用filter(var == "condition")
形式进行筛选。如筛选出江苏
的数据:

> data %>% filter(province == "江苏")
# A tibble: 20 x 4
   province region    year PerGDP
   <chr>    <chr>    <dbl>  <dbl>
 1 江苏     东部地区  2020 121231
 2 江苏     东部地区  2019 122398
 3 江苏     东部地区  2018 115930
 4 江苏     东部地区  2017 107150
 5 江苏     东部地区  2016  96840
 6 江苏     东部地区  2015  89426
 7 江苏     东部地区  2014  81550
 8 江苏     东部地区  2013  74844
 9 江苏     东部地区  2012  67896
10 江苏     东部地区  2011  61947

去除江苏
的数据:

> data %>% filter(!province == "江苏")
# A tibble: 600 x 4
   province region    year PerGDP
   <chr>    <chr>    <dbl>  <dbl>
 1 北京     东部地区  2020 164889
 2 天津     东部地区  2020 101614
 3 河北     东部地区  2020  48564
 4 山西     中部地区  2020  50528
 5 内蒙     西部地区  2020  72062
 6 辽宁     东北地区  2020  58872
 7 吉林     东北地区  2020  50800
 8 黑龙江   东北地区  2020  42635
 9 上海     东部地区  2020 155768
10 浙江     东部地区  2020 100620
# ... with 590 more rows
# i Use `print(n = ...)` to see more rows

针对多个条件

针对多个条件,常使用filter(var %in% "condition")
形式进行筛选。如筛选出江苏、浙江、安徽、上海
四地数据:

> data %>% filter(province %in% c("江苏""浙江""安徽""上海"))
# A tibble: 80 x 4
   province region    year PerGDP
   <chr>    <chr>    <dbl>  <dbl>
 1 上海     东部地区  2020 155768
 2 江苏     东部地区  2020 121231
 3 浙江     东部地区  2020 100620
 4 安徽     中部地区  2020  63426
 5 上海     东部地区  2019 156587
 6 江苏     东部地区  2019 122398
 7 浙江     东部地区  2019 107814
 8 安徽     中部地区  2019  58072
 9 上海     东部地区  2018 148744
10 江苏     东部地区  2018 115930
# ... with 70 more rows
# i Use `print(n = ...)` to see more rows

去除江苏、浙江、安徽、上海
四地数据:

> data %>% filter(!province %in% c("江苏""浙江""安徽""上海")) # remove
# A tibble: 540 x 4
   province region    year PerGDP
   <chr>    <chr>    <dbl>  <dbl>
 1 北京     东部地区  2020 164889
 2 天津     东部地区  2020 101614
 3 河北     东部地区  2020  48564
 4 山西     中部地区  2020  50528
 5 内蒙     西部地区  2020  72062
 6 辽宁     东北地区  2020  58872
 7 吉林     东北地区  2020  50800
 8 黑龙江   东北地区  2020  42635
 9 福建     东部地区  2020 105818
10 江西     中部地区  2020  56871
# ... with 530 more rows
# i Use `print(n = ...)` to see more rows

筛选含有某个字符的行

筛选含有某个字符的行时,需要借助grepl() 函数,将grepl() 函数与filter() 函数进行连用。如筛选出省份名称中含有
的数据:

> data %>% filter(grepl('湖', province))
# A tibble: 40 x 4
   province region    year PerGDP
   <chr>    <chr>    <dbl>  <dbl>
 1 湖北     中部地区  2020  74440
 2 湖南     中部地区  2020  62900
 3 湖北     中部地区  2019  76712
 4 湖南     中部地区  2019  57746
 5 湖北     中部地区  2018  71109
 6 湖南     中部地区  2018  52809
 7 湖北     中部地区  2017  63180
 8 湖南     中部地区  2017  49448
 9 湖北     中部地区  2016  56836
10 湖南     中部地区  2016  45356
# ... with 30 more rows
# i Use `print(n = ...)` to see more rows

去除出省份名称中含有
的数据:

> data %>% filter(!grepl('湖', province))
# A tibble: 580 x 4
   province region    year PerGDP
   <chr>    <chr>    <dbl>  <dbl>
 1 北京     东部地区  2020 164889
 2 天津     东部地区  2020 101614
 3 河北     东部地区  2020  48564
 4 山西     中部地区  2020  50528
 5 内蒙     西部地区  2020  72062
 6 辽宁     东北地区  2020  58872
 7 吉林     东北地区  2020  50800
 8 黑龙江   东北地区  2020  42635
 9 上海     东部地区  2020 155768
10 江苏     东部地区  2020 121231
# ... with 570 more rows
# i Use `print(n = ...)` to see more rows

筛选出省份名称中含有
或者
的数据:

> data %>% filter(grepl('湖|河', province)) 
# A tibble: 80 x 4
   province region    year PerGDP
   <chr>    <chr>    <dbl>  <dbl>
 1 河北     东部地区  2020  48564
 2 河南     中部地区  2020  55435
 3 湖北     中部地区  2020  74440
 4 湖南     中部地区  2020  62900
 5 河北     东部地区  2019  46182
 6 河南     中部地区  2019  55825
 7 湖北     中部地区  2019  76712
 8 湖南     中部地区  2019  57746
 9 河北     东部地区  2018  43108
10 河南     中部地区  2018  52114
# ... with 70 more rows
# i Use `print(n = ...)` to see more rows

去除出省份名称中含有
或者
的数据:

> data %>% filter(!grepl('湖|河', province)) 
# A tibble: 540 x 4
   province region    year PerGDP
   <chr>    <chr>    <dbl>  <dbl>
 1 北京     东部地区  2020 164889
 2 天津     东部地区  2020 101614
 3 山西     中部地区  2020  50528
 4 内蒙     西部地区  2020  72062
 5 辽宁     东北地区  2020  58872
 6 吉林     东北地区  2020  50800
 7 黑龙江   东北地区  2020  42635
 8 上海     东部地区  2020 155768
 9 江苏     东部地区  2020 121231
10 浙江     东部地区  2020 100620
# ... with 530 more rows
# i Use `print(n = ...)` to see more rows

4.针对缺失值的处理

筛选出为缺失值的行

筛选出province
变量为空缺值的数据:

> data %>% filter(is.na(province))
# A tibble: 0 x 4
# ... with 4 variables: province <chr>, region <chr>, year <dbl>, PerGDP <dbl>
# i Use `colnames()` to see all variable names

去除province
变量为空缺值的数据:

> data %>% filter(!is.na(province))
# A tibble: 620 x 4
   province region    year PerGDP
   <chr>    <chr>    <dbl>  <dbl>
 1 北京     东部地区  2020 164889
 2 天津     东部地区  2020 101614
 3 河北     东部地区  2020  48564
 4 山西     中部地区  2020  50528
 5 内蒙     西部地区  2020  72062
 6 辽宁     东北地区  2020  58872
 7 吉林     东北地区  2020  50800
 8 黑龙江   东北地区  2020  42635
 9 上海     东部地区  2020 155768
10 江苏     东部地区  2020 121231
# ... with 610 more rows
# i Use `print(n = ...)` to see more rows

5.其他

更多内容可关注微信公众号日常分享的小懒猫


如有帮助请多多点赞哦!

参考资料

[1]

dplyr: https://cran.r-project.org/web/packages/dplyr/index.html

[2]

国家统计局: https://data.stats.gov.cn/index.htm


文章转载自日常分享的小懒猫,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论