在dplyr管道中过滤NA值并仅对数字列进行夏季化

时间:2016-08-19 11:06:37

标签: r dplyr

我有如下的数据框结构

UITableViewDelegate

我想计算所有数字和int列的平均值。如何在dplyr中完成?

我做了类似的事

$ Lead.Score                        : int  105 120 150 60 80 0 80 0 80 145        
$ Average.Time.Per.Visit            : num  0 83.8 4 0 0 ...
$ TotalVisits                       : int  0 5 2 1 2 0 2 0 2 4 ...
$ Page.Views.Per.Visit              : num  0 2.5 2 1 1 0 2 0 2 4 ...
$ Average.Time.Per.Visit.1          : num  0 83.8 4 0 0 ...
$ Last.Activity                     : chr  "Page Visited on Website" "Email     
$ Last.Activity.Date                : POSIXct, format: NA NA ...
$ First.Landing.Page.Submission.Date: POSIXct, format: NA NA ...
$ Created.On                        : POSIXct, format: "2016-07-31 17:11:00" 

但它不起作用。

1 个答案:

答案 0 :(得分:1)

我们可以使用summarise_if

train_webdata %>%
      group_by(Lead.Stage) %>%
      summarise_if(is.numeric, mean, na.rm = TRUE)

使用可重现的例子

data(iris)  
iris[1:3, 1] <- NA #create some NA elements
iris$Sepal.Length <- as.character(iris$Sepal.Length) #for testing
iris %>% 
     group_by(Species) %>%
     summarise_if(is.numeric, mean, na.rm = TRUE)    
#    Species Sepal.Width Petal.Length Petal.Width
#      <fctr>       <dbl>        <dbl>       <dbl>
#1     setosa       3.428        1.462       0.246
#2 versicolor       2.770        4.260       1.326
#3  virginica       2.974        5.552       2.026

关于OP的错误,在group_by之后调用select操作。由于OP的str中未显示“Lead.Stage”列,因此不清楚它是否为非数字列。如果它是非数字的,则会在select之后删除。因此,我们可以在select步骤

之后执行group_by操作
iris %>%
    group_by(Species) %>%
    select(which(sapply(., is.numeric))) %>%
    summarise_each(funs(mean(., na.rm = TRUE)))
#        Species Sepal.Width Petal.Length Petal.Width
#      <fctr>       <dbl>        <dbl>       <dbl>
#1     setosa       3.428        1.462       0.246
#2 versicolor       2.770        4.260       1.326
#3  virginica       2.974        5.552       2.026