[英]Multiple Paired T-Tests in R stratified by category showing variable and p-values part of the dataset
編碼器,
我有一個數據集,記錄了全球經濟衰退前后每個國家/地區的汽車類型。
我想做一個配對的t檢驗,比較每種汽車類型(“ cartype”)之前( Before
)和之后( After
)的所有國家( Country
)的汽車數量。 此外,每個t檢驗的p值結果應打印到新的數據框中。
我認為需要建立一個數組/ do-loop,但即使是t檢驗的編碼也很麻煩。 救命!
謝謝!
##insert data
example<- read.table (header=TRUE, text=" Country Cartype before after
UAE LHR 17 91
UAE AUH 50 30
UAE DXB 72 85
UAE DOH 19 8
UAE AMS 72 98
UAE FRA 6 3
UAE CDG 14 39
UAE BOM 81 65
UAE DEL 31 55
UAE ABV 85 50
IN LHR 42 100
IN AUH 6 96
IN DXB 36 82
IN DOH 15 20
IN AMS 33 76
IN FRA 17 1
IN CDG 71 52
IN BOM 51 84
IN DEL 29 25
IN ABV 74 71
PK LHR 35 15
PK AUH 27 83
PK DXB 67 8
PK DOH 98 51
PK AMS 44 16
PK FRA 41 14
PK CDG 80 52
PK BOM 76 74
PK DEL 42 91
PK ABV 50 95
")
## calculate how many cartypes in total
n=length(table(example$Cartype))
## create a list with empty object to store the t test result later
result=vector(mode = list, length = n)
## use do loop to perform t-test by cartype
for (i in 1:n)
{
y1=example$before[which(example$cartype==i)]
y2=example$after[which(example$cartype==i)]
result[[i]]=t.test(y1,y2, paired=T)
}
### print the result
result
感謝格式化的努力
首先,請注意R是區分大小寫的,因此cartype
與Cartype
不同
我認為這段代碼就是您想要組合的代碼:
n=length(table(example$Cartype))
result=vector(length = n)
cartype <- unique(example$Cartype)
for (i in 1:n)
{
y1=example[example$Cartype==cartype[[i]],'before']
y2=example[example$Cartype==cartype[[i]],'after']
result[[i]]=t.test(y1,y2, paired=T)$p.value
}
df <- data.frame(row.names = cartype,p.value=result)
p.value
LHR 0.3273000
AUH 0.3256148
DXB 1.0000000
DOH 0.3694496
AMS 0.5884953
FRA 0.1576278
CDG 0.6980914
BOM 0.7642104
DEL 0.2718261
ABV 0.9292062
您可以將其縮短為:
p.values=c(
by(example,
example$Cartype,
FUN=function(x) t.test(x$before,x$after, paired=T)$p.value))
df <- data.frame(p.values)
p.values
ABV 0.9292062
AMS 0.5884953
AUH 0.3256148
BOM 0.7642104
CDG 0.6980914
DEL 0.2718261
DOH 0.3694496
DXB 1.0000000
FRA 0.1576278
LHR 0.3273000
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.