我有這樣的資料框
df.t<-data.frame(ID=c(1,1,2,2,3,3,4,4,5,5,6,6),type=rep(c("A","B"),12),Count.1= rep(c(20,80),12),Count.2=rep(c(70,30),12))
我想對每一行進行費希爾測驗。例如:我想測驗在count.1和count.2中具有2種A和B的ID 1的計數是否不同?我在網站上嘗試了不同的代碼,但它們不起作用。請問有什么簡單的功能可以按位置和型別分組的所有行嗎?任何幫助表示贊賞,謝謝!
uj5u.com熱心網友回復:
為了便于計算,我首先將您的資料結構從“長”格式轉換為“寬”格式。然后設定rownames為資料框,并apply()用于fisher.test(). 輸出是一個命名串列,其名稱來自rownames您的資料框(ID在本例中)。
此處粘貼前兩個輸出條目以進行演示。
library(tidyverse)
df.t <- data.frame(ID=c(1,1,2,2,3,3,4,4,5,5,6,6),
type=rep(c("A","B"),12),
Count.1= rep(c(20,80),12),
Count.2=rep(c(70,30),12)) %>%
distinct() %>%
pivot_wider(everything(), names_from = type, values_from = c(Count.1, Count.2)) %>%
as.data.frame()
rownames(df.t) <- df.t[, 1]
df.t <- df.t[, -1]
apply(df.t, 1, function(x) fisher.test(matrix(as.numeric(x[1:4]), ncol=2, byrow=T)))
串列輸出
$`1`
Fisher's Exact Test for Count Data
data: matrix(as.numeric(x[1:4]), ncol = 2, byrow = T)
p-value = 1.05e-12
alternative hypothesis: true odds ratio is not equal to 1
95 percent confidence interval:
0.05288657 0.21489688
sample estimates:
odds ratio
0.1086015
$`2`
Fisher's Exact Test for Count Data
data: matrix(as.numeric(x[1:4]), ncol = 2, byrow = T)
p-value = 1.05e-12
alternative hypothesis: true odds ratio is not equal to 1
95 percent confidence interval:
0.05288657 0.21489688
sample estimates:
odds ratio
0.1086015
p值輸出
如果要將結果簡化為僅輸出 p 值,可以執行以下操作:
apply(df.t, 1, function(x) fisher.test(matrix(as.numeric(x[1:4]), ncol=2, byrow=T))$p.value)
1 2 3 4 5
1.050355e-12 1.050355e-12 1.050355e-12 1.050355e-12 1.050355e-12
6
1.050355e-12
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/449404.html
標籤:r
上一篇:順序列名加0
