2014-09-24 93 views
6

我試圖包裝一些函數內的dplyr魔術產生data.frame,然後我用xtable打印。使用dplyr summarise_each()與is.na()

的最終目的是有this一個dplyr版本的工作,閱讀各地我遇到了非常有用的summarise_each()功能與regroup()子集化後(因爲這是一個函數內),然後我就可以用它來得到解析的列來。

我遇到的問題(迄今爲止)是從​​內呼叫is.na(),因爲我被告知Error: expecting a single value

我故意不張貼我的功能,只是還沒有,但一個小例子如下(注: - 這使用group_by()而在我的功能我regroup()替換此)...

library(dplyr) 
library(magrittr) 
> t <- data.frame(grp = rbinom(10, 1, 0.5), 
       a = as.factor(round(rnorm(10))), 
       b = rnorm(10), 
       c = rnorm(10)) 
t %>% 
group_by(grp) %>% ## This is replaced with regroup() in my function 
summarise_each(funs(is.na)) 
Error: expecting a single value 

運行失敗,其調用is.na()這是問題,因爲如果我工作,而不是從觀測的數量在每它的工作原理(推導缺失的比例要求)...

> t %>% 
group_by(grp) %>% ## This is replaced with regroup() in my function 
summarise_each(funs(length)) 
Source: local data frame [2 x 4] 

    grp a b c 
1 0 8 8 8 
2 1 2 2 2 

真正的問題是,雖然我並不需要每一列中只是is.na(),但sum(is.na())按照鏈接的例子所以我真的希望是......

> t %>% 
group_by(grp) %>% ## This is replaced with regroup() in my function 
summarise_each(funs(propmiss = sum(is.na)/length)) 

但問題是,沒有按sum(is.na) 「T工作,我期待它(可能是因爲我的期望是錯誤的!)......

> t %>% 
group_by(grp) %>% ## This is replaced with regroup() in my function 
summarise_each(funs(nmiss = sum(is.na))) 
Error in sum(.Primitive("is.na")) : invalid 'type' (builtin) of argument 

我打過電話明確用括號is.na(),但同樣會返回一個錯誤......

> t %>% 
+ group_by(grp) %>% ## This is replaced with regroup() in my function 
+ summarise_each(funs(nmiss  = sum(is.na()))) 
Error in is.na() : 0 arguments passed to 'is.na' which requires 1 

任何建議或文檔指針將非常感激地收到。

感謝,

slackline

+0

+1一個真棒圖標 – 2014-09-24 13:14:56

回答

8

這是有可能的,在一個小的數據與一些NA設置進行測試:

df <- data.frame(a = rep(1:2, each = 3), 
       b = c(1, 1, NA, 1, NA, NA), 
       c = c(1, 1, 1, NA, NA, NA)) 

df 
# a b c 
# 1 1 1 1 
# 2 1 1 1 
# 3 1 NA 1 
# 4 2 1 NA 
# 5 2 NA NA 
# 6 2 NA NA 


df %>% 
    group_by(a) %>% 
    summarise_each(funs(sum(is.na(.))/length(.))) 
# a   b c 
# 1 1 0.3333333 0 
# 2 2 0.6666667 1 

因爲你問指向文檔:在.是指每個部分數據,並在一些中使用示例 in ?summarize_each。在參數部分?funs中描述爲「虛擬參數」,並且使用示例。該.也進行了簡要地參數的?do節中描述:「...您可以使用.指當前組」

+0

優秀,爲表示感謝。我之前遇到過'.',因爲它用於表示應該轉換爲'plyr()'中的因子的變量,我已經看到它在某些'dplyr()'示例中使用。我覺得困惑的事情(但現在要記住)是許多命令不需要使用它來指代當前的組,而且它並不總是清楚哪些組合不需要它。無論如何,這在我正在工作的功能中很有效,再次感謝。 – slackline 2014-09-24 15:19:13