R:使用创建函数dplyr功能
问题描述:
我有三个感兴趣的变量数据帧: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的文章,但是我认为我正确应用了这些建议?
答
下面是解
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
从那里得到它,谢谢! –
'$ group'会寻找' “组”'代替你传递作为'group'变种的一部分。尝试'。[[group]]'(我怀疑这仍然不是在dplyr中执行SE的正确方法,但它至少可以工作)。还有一件小事:你可能不想使用'data_frame'作为var,因为这是dplyr函数的名字。 – Frank
感谢您的建议@Frank。虽然没有工作。有点小把戏,这整个SE的东西.. =) –
你真的读过'help(“nse”)'?你的代码看起来不像那样。你似乎只是使用'。$'和'_'(SE)函数。 –