繁体   English   中英

R公式:如何使用公式将计算约束到两组?

[英]R formula: how to constrain calculations to two groups using formula?

我想为日志等级测试建立事后测试,以比较各个组:

library(survival)
survdiff(DV ~ IV, data=mydf)

有什么办法可以做这样的事情(例如,将第2组与第7组进行比较):

survdiff(DV ~ I(if(as.numeric(IV) == 2) {1} else {if(as.numeric(IV) == 7) {2} else {NA}} ), data=mydf )

我知道我可以从mydfSurv对象DV过滤掉不需要的行

df2vs7<-mydf[as.numeric(mydf$IV)==2 | as.numeric(mydf$IV)==7,]
DV2vs7<-DV[as.numeric(mydf$IV)==2 | as.numeric(mydf$IV)==7,]

但是我认为它效率很低; 计算机将需要为比较组的每种组合存储每个单独的数据对象。

使用subset参数在(嵌套)循环内survdiff 您可能必须对循环进行调整,以避免出现一对一的错误,但是您明白了。

l <- list()
n <- <no. of groups>
mydf$IV <- as.numeric(mydf$IV)
for(i in seq_len(n - 1))
{
    for(j in seq(i + 1, to=n, by=1))
    {
        l <- c(l, survdiff(DV ~ factor(IV), mydf, subset=IV %in% c(i, j)))
    }
}

好的,这是一个复制粘贴解决方案。 假设我们有一个df dataframe对象,其中有IV个具有length(levels(df$IV))级的分类变量和Surv类型的DF对象,并且我们想在每对组之间执行成对对数秩检验

library(gregmisc)
levels<-sort(unique(as.numeric((mydf$IV))))
groups<-combinations(length(levels),2,levels)
#or if we assume that levels produced by as.numeric(mydf$IV) are in sequence 1:n, we can use more efficient:
#groups<-combinations(length(levels(df$IV)),2)
library(plyr)
alply(groups, 1, 
    function(pair) {
        survdiff(DV ~ factor(IV), mydf, subset=IV %in% c(pair[[1]], pair[[2]]))
    }
)

最后一个表达式返回结果

像这样吗

survdiff(DV ~ IV, data=mydf[ as.numeric(mydf$IV) %in% c(2,7),] )

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM