R公式:如何使用公式将计算约束到两组?
我想为log rank test构建事后测试,将各个组相互比较:R公式:如何使用公式将计算约束到两组?,r,R,我想为log rank test构建事后测试,将各个组相互比较: library(survival) survdiff(DV ~ IV, data=mydf) 是否有任何方法可以这样做(例如,比较第2组和第7组): 我知道我可以从mydf和Surv对象DV df2vs7<-mydf[as.numeric(mydf$IV)==2 | as.numeric(mydf$IV)==7,] DV2vs7<-DV[as.numeric(mydf$IV)==2 | as.numeric(myd
library(survival)
survdiff(DV ~ IV, data=mydf)
是否有任何方法可以这样做(例如,比较第2组和第7组):
我知道我可以从
mydf
和Surv
对象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,]
类似这样的东西
survdiff(DV~IV,data=mydf[as.numeric(mydf$IV)%in%c(2,7),])
类似的东西
survdiff(DV~IV,data=mydf[as.numeric(mydf$IV)%in%c(2,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)))
}
}
l在(嵌套)循环中使用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)))
}
}
l好的,这是一个复制粘贴解决方案。假设我们有df
adataframe
对象,其中我们有IV
分类变量和length(levels(df$IV))
levels,以及df
类型的Surv
对象,我们希望在每对组之间执行成对的对数秩测试
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]]))
}
)
库(gregmisc)
级别好的,这是一个复制粘贴解决方案。假设我们有df
adataframe
对象,其中我们有IV
分类变量和length(levels(df$IV))
levels,以及df
类型的Surv
对象,我们希望在每对组之间执行成对的对数秩测试
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]]))
}
)
库(gregmisc)
levels与“高度低效”部件不一致。@zx8754为什么?另外,它需要的内存大约是原始mydf所需内存的(n-1)倍。R不能廉价地(即通过引用)子集行。不同意“高度低效”部分。@zx8754为什么?另外,它需要的内存大约是原始mydf所需内存的(n-1)倍。R不能廉价地(即通过引用)对行进行子集划分。从技术上讲,它不是我问题的答案(它不会改变公式),但它确实解决了我的问题。您还应该对DV
对象执行相同的操作(它不能是数据帧的一部分,因为它是Surv
)是来自相同mydf
数据帧的DV
和I
变量?实际上它是IV
而不是I
(打字)。是的,它们来自同一个数据集,但是DV
属于Surv
类型。据我所知,当您对一个数据帧进行子集时,您会排除每一列的行,因此DV
和IV
是我的解决方案的子集。是的。我不知道,Surv可以是数据帧的一部分!我以为只有因子
和向量
类型才可以!从技术上讲,这不是我问题的答案(它不会改变公式),但它确实解决了我的问题。您还应该对DV
对象执行相同的操作(它不能是数据帧的一部分,因为它是Surv
)是来自相同mydf
数据帧的DV
和I
变量?实际上它是IV
而不是I
(打字)。是的,它们来自同一个数据集,但是DV
属于Surv
类型。据我所知,当您对一个数据帧进行子集时,您会排除每一列的行,因此DV
和IV
是我的解决方案的子集。是的。我不知道,Surv可以是数据帧的一部分!我以为只有因子
和向量
类型才可以!比我聪明的人可能会用*apply
重写。粘贴在单独答案中的版本是你答案的plyr
ed和大修版本。比我聪明的人可能会用*apply
重写。粘贴在单独答案中的版本是你答案的plyr
ed和大修版本你的回答。