ACROSS函数

# across 函数

#以iris数据集为例

#library(tidyverse)

#计算所有变量的非缺失值的总数

count <- iris %>%

  summarise_all(~sum(!is.na(.)))

#计算sepal.length,sepal.width,petal.length,petal.width非缺失值的均值

mean_ir <- iris %>%

     summarise(

       mean_l_sepal = mean(Sepal.Length,na.rm=T),

       mean_w_sepal = mean(Sepal.Width,na.rm=T),

       mean_l_petal = mean(Petal.Length,na.rm=T),

       mean_w_petal = mean(Petal.Width,na.rm=T)

     )

#上面的过程对于变量较少时,还可以,但是如果变量比较多,就很麻烦,可以用summarise_if简化过程

#以species为分组变量,计算所有数值变量的均值

mean_group <- iris %>%

          group_by(Species) %>%

          summarise_if(is.numeric,mean,na.rm=T)

 

 

## 函数的基本形式

 

across()函数,主要有三个参数:     

across(.cols=,.fns,.names=)     

.cols用来表示用户自定义的列(可以多选),选择的语法和select函数一致。       

.fns表示用户需要运行的函数(可以多个),有三种形式可以选             

1.function,例如sum,mean

2.purrr-style lamda,例如 ~mean(.x,na.rm=T)

3.list of functions/lambdas,例如,list(mean=mean,n_miss=~sum(is.na(.x)))

.names是函数得到结果的名字。

 

#计算所有变量的非缺失值的总数

counts <- iris %>%

       summarise(

         across(everything()& !Species ,function(x) sum(x,na.rm=T))

       )

 

means <- iris %>%

  summarise(

         across(everything()& !Species,list(mean=mean,sd=sd),na.rm=T),

         n = n()

  )

# using across(),如果结果返回一行以上的数据,应该使用reframe,summarise会报错

quantile <- iris %>%

  group_by(Species) %>%

  reframe(

    prob = c(.25, .75),

    across(

      ends_with("Length"),

      ~ quantile(., prob, na.rm = TRUE)

    )

  )

 

  • 8
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值