用R做数据清洗的人应该对mutate()不会陌生,这个函数用来增加列变量,非常好用,不过它的一些同胞mutate_all(),mutate_at(),mutate_if()知名度就没有那么高,但其实这几个也是很好用的函数,主要用于对列变量使用函数,修改列变量的值。三者区别如下

       mutate_all()作用所有变量
       mutate_at()作用于选中的变量
       mutate_if()作用于按条件筛选后的变量

        先建一个dataframe,因为直接rnorm的函数保留多位小数,所以用了floor()向下取整,另外,因为rnorm()生成的是随机数,所以你跑出来的结果和我这里不一样也很正常。

data<-data.frame(var_1=floor(rnorm(10,0,5)),
                 var_2=floor(rnorm(10,5,5)),
                 var_3=paste("good_boy",1:10,sep = ""))

        数据如下

     

        我们先来看mutate_all()函数,因为var_1,var_2是数值,var_3是字符串,我们就不做加减乘除运算,而是给每个字段上加一个ok,代码如下。

data_1=mutate_all(data,.funs=funs(paste(.,"ok",sep = "_")))

        data_1长这样

         我们再看mutate_at()函数,因为var_1,var_2是数值,我们选择对它们做一个加法运算,给var_1,var_2加10。

data_2=mutate_at(data,.vars = vars(var_1,var_2),.funs=funs(.+10))

        data_2长这样

         最后看mutate_if(),设置条件,如果对象是数值则乘以10,我们知道,在做判断时,默认都是按ture执行下一步。

data_3=mutate_if(data,is.numeric,.funs = funs(.*10))

        data_3长这样

         到这里,我们就知道mutate_all(),mutate_at(),mutate_if()的使用方法,它们主要是借助funs这个参数完成对数据的改造。

更多推荐

[R]_使用mutate_all(),mutate_at(),mutate_if()操纵数据框的列