我经常发现需要从手稿中重新创建表以进行进一步分析。这如何最容易实现?重新创建R表中的计数并模拟多变量分析
例如:
有一种简单的方法来重新创建共4列的数据框(脑梗塞(Y/N),结果(差/好),再出血(Y/N)和处理(尼莫地平,安慰剂)和276个+ 278行,这样我可以进一步分析此
编辑:如迪文指出的类别不是相互排斥的,因此需要模拟观察到的响应
我经常发现需要从手稿中重新创建表以进行进一步分析。这如何最容易实现?重新创建R表中的计数并模拟多变量分析
例如:
有一种简单的方法来重新创建共4列的数据框(脑梗塞(Y/N),结果(差/好),再出血(Y/N)和处理(尼莫地平,安慰剂)和276个+ 278行,这样我可以进一步分析此
编辑:如迪文指出的类别不是相互排斥的,因此需要模拟观察到的响应
我希望我真实您完全明白您的意图:重新创建上表创建的原始数据。
R中的上述表格(我不跟数字打交道括号内的表):
tab <- as.data.frame(matrix(c(61, 55, 25, 92, 91, 38), 3, 2))
row.names(tab) <- c('Cerebral infarct', 'Poor outcome', 'Rebleed')
names(tab) <- c('Nimodipine', 'placebo')
其中在返回:
> tab
Nimodipine placebo
Cerebral infarct 61 92
Poor outcome 55 91
Rebleed 25 38
不是最漂亮的解决方案,但容易跟随:我抓住上表中的每个单元格,并将所需变量的逻辑值向量n次返回,然后转换为数据帧:
res <- lapply(names(tab), function(col)
lapply(row.names(tab), function(row)
rep(c(row=='Cerebral infarct', row=='Poor outcome', row=='Rebleed', col=='Nimodipine'), tab[row, col])
))
res <- rapply(res, function(x) x)
res <- as.data.frame(matrix(res, , 4, byrow=T))
names(res) <- c(row.names(tab), names(tab)[1])
结果:
> str(res)
'data.frame': 362 obs. of 4 variables:
$ Cerebral infarct: logi TRUE TRUE TRUE TRUE TRUE TRUE ...
$ Poor outcome : logi FALSE FALSE FALSE FALSE FALSE FALSE ...
$ Rebleed : logi FALSE FALSE FALSE FALSE FALSE FALSE ...
$ Nimodipine : logi TRUE TRUE TRUE TRUE TRUE TRUE ...
PS:数据帧持有362案件你可以看到感谢:
> sum(tab)
[1] 362
PS:感谢@迪文的评论,我才意识到我没拿关心可能的重叠。
最好避免使用名称“table”作为数据对象,因为这恰好也是一个非常有用的函数的名称。我也对统计数据表示担忧。我没有看到任何迹象表明这些是相互排斥的结果。这些类别之间肯定存在系统性重叠。我会在你的第一个六行之后停下来,因为我认为数据演示文稿不支持下一步。 – 2012-01-03 15:14:17
包xtable可能对于将表格转换为乳胶格式也很有用 – 2012-01-04 04:12:17
谢谢@DWin,你真的是对的 - 像往常一样:)将无论如何,在这里留下我的答案,并附上一些关于'table'命名的修改。可悲的是,我没有记住一些重叠的事实可能是:(这也是有道理的。 – daroczig 2012-01-04 08:18:26
正如Dwin指出的 - 我没有忘记类别之间的重叠。
这是我对模拟数据集和运行基于报告数据的多变量分析...因此,在调整其他变量后,治疗似乎与结果有关。
treat<-factor(c(rep("Placebo",276),rep("Nimodipine",278)))
infarct<-factor(rep("No",554),levels=c("No","Yes"))
outcome<-factor(rep("Good",554),levels=c("Good","Poor"))
rebleed<-factor(rep("No",554),levels=c("No","Yes"))
df<-data.frame(treat=treat,infarct=infarct,outcome=outcome,rebleed=rebleed)
fun<-function(df){
d<-df
nimo<-subset(d,treat=="Nimodipine")
place<-subset(d,treat=="Placebo")
nimo$infarct[sample(c(1:278),61)]<-"Yes"
nimo$outcome[sample(c(1:278),55)]<-"Poor"
nimo$rebleed[sample(c(1:278),25)]<-"Yes"
place$infarct[sample(c(1:276),92)]<-"Yes"
place$outcome[sample(c(1:276),91)]<-"Poor"
place$rebleed[sample(c(1:276),38)]<-"Yes"
d<-rbind(nimo,place)
return(d)
}
fun2<-function(df){
glm(outcome~rebleed+infarct+treat,data=df,family=binomial)->f
exp(coef(f))->f2
return(f2)
}
lis.data<-list(10000)
for (j in 1:10000){
lis.data[[j]]<-fun(df)
}
lis.reg<-matrix(NA,10000,4)
for (j in 1:10000){
lis.reg[j,]<-fun2(lis.data[[j]])
}
par(mfrow=c(2,2))
for (j in 1:4){
plot(lis.reg[,j])
}
不知道如果我理解你的问题 - 你想_simulate_从汇总表中创建的原始数据,或者你想从其他手稿表_recreate_到您自己的报告? – 2012-01-03 11:37:04
我想“模拟”汇总表的原始数据以便随后进一步分析并检查其结果 – Misha 2012-01-03 11:49:09
'?gl'在此处可能很有用 – baptiste 2012-01-03 22:25:32