dplyr包笔记

dplyr包是R语言数据处理的神器,这里记录一点刚学到的东西。

以下操作基于R语言自带数据集"mtcars".

变量选取: select

  • starts_with(): starts with a prefix
  • ends_with(): ends with a prefix
  • contains(): contains a literal string
  • matches(): matches a regular expression
  • num_range(): a numerical range like x01, x02, x03.
  • one_of(): variables in character vector.
  • everything(): all variables.

观测值过滤: filter

dplyr提供filter,filter_at,filter_all,filter_if用来对行数据进行过滤,仅保留符合要求的行。

filter用来处理特定的几个变量,比如说:

# 保留mtcars中cyl为6的行
filter(mtcars, cyl==6)
# 保留cyl为6但是vs不为0的行
filter(mtcars, cyl==6, vs != 0)

功能比较简单,适用于处理特定几列。但是如果你想要在包含10多个变量的数据框中找到包含NA的行,肯定不能逐个变量写判断语句,这就需要用到filter_all

filter_all(mtcars, any_vars(is.na(.)))

这里的any_vars表示任意一列,.则指代当前选定列,那么is.na(.)就会返回当前列的布尔值向量。

或者如果你的变量命命名很有特点,那么可以使用filter_at判断变量名是否符合要求来选择列:

#判断变量名里有‘d’的列是否为NA.
filter_at(mtcars, vars(contains('d')), any_vars(is.na(.)))
# 判断变量名中含有'd'的列中,所有值是否都大于3
filter_at(mtcars, vars(contains('d')), all_vars(.>3))

这里的vars()函数用于选择变量,可以用select里用到筛选函数对变量名进行判断, 比如说contains()就返回变量命包含某个字符的变量。

更复杂一点,如果我们仅需要对那些整数列进行筛选,那么就需要用到filter_if, 因为它的第二个参数会传递给rlang::as_function用于构造闭包,而闭包则是一种函数。

filter_if(mtcars, ~all(floor(.) == .), all_vars(.!=0))

~all(floor(.) ==.)的参数选择下,最后是对cyl, hp, vs, am, gear, carb这几列进行处理,可以用如下的方式进行验证。

filter_if(mtcars, ~ all(floor(.) == .), all_vars(. == 4))

由于hpb里不存在一个值为4,那么all_vars返回的是全FALSE的向量。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值