2016-02-29 93 views
-1

我有三個感興趣的變量數據幀:R:使用創建函數dplyr功能

  • 生存時間
  • 聚合因子
  • 事件指示器(死:是或否)

我想計算每個組的發病率。我每天都這樣做,所以擁有一個這樣的函數而不是一個長腳本會很棒。

我試過以下,但不起作用。

library(survival) 
data(lung) # example data 
lung$death <- ifelse(lung$status==1, 0, 1) # event indicator: 0 = survived; 1 = dead. 

# Function 
func <- function(data_frame, group, survival_time, event) { 
    library(epitools) 
    table <- data_frame %>% 
      filter_(!is.na(.$group)) %>% 
      group_by_(.$group) %>% 
      summarise_(pt = round(sum(as.numeric(.$survival_time)/365.25)), 
        events = sum(.$event)) %>% 
      do(pois.exact(.$events, pt = .$pt/1000, conf.level = 0.95)) %>% 
      ungroup() %>% 
      transmute_(Category = c(levels(as.factor(.$group))), 
        Events = x, 
        Person_years = pt*1000, 
        Incidence_Rate = paste(format(round(rate, 2), nsmall=2), " (", 
             format(round(lower, 2), nsmall=2), " to ", 
             format(round(upper, 2), nsmall=2), ")", 
             sep="")) 
    return(table) 
} 

func(lung, sex, time, death) 

**Error: incorrect length (0), expecting: 228 In addition: Warning message: 
In is.na(.$group) : is.na() applied to non-(list or vector) of type 'NULL'** 

任何想法?我已經閱讀了有關dplyr中NSE和SE的文章,但是我認爲我正確應用了這些建議?

+0

'$ group'會尋找' 「組」'代替你傳遞作爲'group'變種的一部分。嘗試'。[[group]]'(我懷疑這仍然不是在dplyr中執行SE的正確方法,但它至少可以工作)。還有一件小事:你可能不想使用'data_frame'作爲var,因爲這是dplyr函數的名字。 – Frank

+0

感謝您的建議@Frank。雖然沒有工作。有點小把戲,這整個SE的東西.. =) –

+0

你真的讀過'help(「nse」)'?你的代碼看起來不像那樣。你似乎只是使用'。$'和'_'(SE)函數。 –

回答

2

下面是解

data_frame = lung 
group = "sex" 
survival_time = "time" 
event = "death" 
data_frame %>% 
    filter_(paste("!is.na(", group, ")")) %>% 
    group_by_(group) %>% 
    summarise_(
    pt = paste("round(sum(as.numeric(", survival_time, ")/365.25))"), 
    events = paste("sum(", event, ")") 
) 
+0

我認爲「慣用」的方式是使用'lazyeval :: interp'而不是粘貼字符串 –

+0

從那裏得到它,謝謝! –