我經常發現需要從手稿中重新創建表以進行進一步分析。這如何最容易實現?重新創建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