我有一個看起來像這樣的資料框,比如說這叫做 DF。
| 主題 | Avg_Score | EOTM | FSO_1 |
|---|---|---|---|
| 約瑟夫 | 1.09 | 1.20 | 6.1 |
| 約瑟夫 | 0.89 | 1.90 | 6.8 |
| 約瑟夫 | 0.99 | 0.80 | 8.2 |
| 約瑟夫 (B) | 0.76 | 0.80 | 8.9 |
| 約瑟夫 (B) | 1.23 | 0.10 | 21.1 |
| 約瑟夫 (B) | 1.11 | 0.22 | 26.1 |
| 蘇西 | 1.8 | 11.20 | 60.1 |
| 蘇西 | 1.9 | 10.90 | 63.8 |
| 蘇西 | 1.4 | 10.80 | 81.2 |
| 蘇西 (B) | 1.1 | 10.80 | 84.9 |
| 蘇西 (B) | 1.2 | 12.10 | 71.1 |
| 蘇西 (B) | 1.4 | 11.22 | 76.1 |
我想在每個主題和每個類別中的主題基線(Base)之間執行 Mann-Whitney 測驗。例如,分別對 Joseph 和 Joseph (Base) 的 Avg_Score、EOTM 和 FSO_1 進行 Mann-Whitney 檢驗,因此我得到 3 個 p 值,用于直接比較兩者。我的最終目標是基本上制作一個最終的資料框,DF2,如下所示:
| 主題 | Avg_Score | EOTM | FSO_1 |
|---|---|---|---|
| 約瑟夫 | p-val | p-val | p-val |
| 蘇西 | p-val | p-val | p-val |
其中 [p-val] 是常規主題名稱和主題名稱 (Base) 之間的結果 p 值。(例如,P-val for [p-value] for Avg_Score with Joseph 是一項比較 Joseph Avg_Score 與 Joseph (Base) Avg_Score 的惠特尼檢驗。
要進行 mann-whitney 測驗,我可以使用 wilcox.test 命令。但是在一個包含超過此處列出的行/列的大型資料集中,如果有必要,我怎么能把它作為一個 for 回圈呢?我將不勝感激,謝謝。wilcox 測驗的一個例子是這里。
Subject <- c("Joseph", "Joseph", "Joseph", " Joseph (B)", " Joseph (B)", " Joseph (B)", " Susie", "Susie", "Susie", "Susie (B)", "Susie (B)", "Susie (B)")
Avg_Score <- c(1.09, 0.89, 0.99, 0.76, 1.23, 1.11, 1.88, 1.9, 1.4, 1.1, 1.2, 1.4)
EOTM <- c(1.2, 1.9, 0.8, 0.8, 0.1, 0.22, 11.2, 10.9, 10.8, 10.8, 12.1, 11.22)
FS0_1 <- c(6.1, 6.8, 8.2, 8.9, 21.1, 26.1, 60.1, 63.8, 81.2, 84.9, 71.1, 76.1)
DF <- as.data.frame(Subject, Avg_Score, EOTM, FS0_1)
uj5u.com熱心網友回復:
從“Subject”創建一個臨時列“Sub”,然后從“Subject”中洗掉空格(\\s )(和任何字符以將其用作分組列,回圈across數字列,對“Sub”沒有的元素進行子集化't have(其次是 'B' 和其余的第二個子集,應用wilcox.test并提取 pvalue ( $p.value)
library(dplyr)
library(stringr)
DF %>%
mutate(Sub = Subject) %>%
group_by(Subject = trimws(str_remove(Subject, "\\s \\(.*"))) %>%
summarise(across(where(is.numeric), ~
wilcox.test(.x[str_detect(Sub, "\\(B")],
.x[str_detect(Sub, "\\(B", negate = TRUE)])$p.value), .groups = "drop")
-輸出
# A tibble: 2 × 4
Subject Avg_Score EOTM FS0_1
<chr> <dbl> <dbl> <dbl>
1 Joseph 0.7 0.121 0.1
2 Susie 0.121 0.507 0.4
base R- 與上述類似的邏輯
by(DF, trimws(DF$Subject, whitespace = "\\s \\(.*|\\s*"),
FUN = \(x) {
i1 <- grepl("\\(B", x$Subject)
sapply(x[-1], \(u) wilcox.test(u[i1], u[!i1])$p.value)
})
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/530797.html
標籤:r统计数据
上一篇:在R中的矩陣中應用函式
