2016-08-19 12 views
1

は私がすべての数値とint型の列の平均値を計算したい フィルタリングNA値は

$ 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" 

の下のようなデータフレーム構造を有していることを意味します。どのようにdplyrでそれを行うには?

私はこの

train_webdata %>% 
    select(which(sapply(., is.numeric))) %>% 
    group_by(Lead.Stage) %>% 
    summarise_each(funs(mean,na.rm=TRUE)) 

のような何かをした。しかし、それは動作しません。

答えて

1

我々はOPのエラーに関しては再現性の例

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 

を使用してsummarise_if

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

使用することができ、group_by操作がselect後に呼び出されます。 OPのstrに 'Lead.Stage'列が表示されないため、非数値列であるかどうかは不明です。数字以外の場合は、selectの後に削除されます。そこで、我々はselect_if(is.numeric) ``のように使用することができます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 
+0

dplyrで 'select_if'機能は今もあり、後select操作を行うことができます。 – aosmith