2016-08-19 5 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" 

아래와 같이 dataframe 구조를 갖는 것을 의미한다. 어떻게 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