Data transformation
这次我们继续学习
select()
mutate()
这两个函数
上次我们学习了filter函数是对行变量进行筛选,但是有时候,我们想对列变量筛选怎么办呢?
那我们就要知道select函数了
继续使用上次的数据集
一,通过列名筛选
select(flights, year, month, day)
代表筛选了 年月日三列
第二种写法,筛选从年到日中间所有变量,采用冒号过度
select(flights, year:day)
第三点需要注意的就是变量反选,如果在变量前面加上负号,则代表去除该列
select(flights, -(year:day)) #表示从数据框中去除从year到day中间所有的列
还有下面的常见函数 同时注意一点,这里好像不区分字母大小写
starts_with("abc"):匹配列名以abc开头的列
比如筛选以“time”开头的列
select(flights, starts_with("TIME"))select(flights, starts_with("time"))
ends_with("xyz"): 匹配列名以xyz结尾的列
contains("ijk"): 匹配列名中包含ijk的列
matches("(.)\1")这个是利用正则表达式,匹配任何一个有重复的字符
num_range("x", 1:3) 匹配 x1, x2 and x3,前后不等长,会自动填充
下面我们学一下如何对列变量进行顺序调整
比如我们想把time_hour, air_time这两列挪到第一二列,该怎么办呢?
select(flights, time_hour, air_time, everything())
这就成功了
mutate()
这个函数是代表重新生成一个新的变量,且变量在最后
flight=mutate(flights,gain = arr_delay - dep_delay,speed = distance / air_time * 60)select(flight,gain ,speed ,everything())
如果我们只想保留我们生成的变量,就要使用transmute()函数
transmute(flights, gain = arr_delay - dep_delay,hours = air_time / 60,gain_per_hour = gain / hours+