2017-05-07 128 views
4

我有一个包含实验数据的数据集。 每天我有新的观察在未来计算for循环中的p值

我的DF的与列A虚构例子: 天:天指数 组一个:数据控制 组b:数据处理。

structure(list(day = c(1L, 1L, 2L, 2L, 2L, 3L, 3L, 3L, 3L), group_a = c(4L, 
2L, 3L, 1L, 1L, 4L, 3L, 2L, 4L), group_b = c(3L, 4L, 2L, 2L, 
2L, 2L, 3L, 4L, 5L)), .Names = c("day", "group_a", "group_b"), class = "data.frame", row.names = c(NA, 
-9L)) 

我想这个子集数据集中,应用像Wilcoxon符号秩检验:

test <- wilcox.test(df$group_a, df$group_b, alternative = 'g') 
test$p.value 

在这个例子中我申请测试在整个数据集。

我想它适用于1天,然后1天,2等,终于等到一个看起来像(虚构数据)名单:

day p-value 
1 0.02 
2 0.03 
3 0.3 

如何申请测试的for循环超过“一天”,但在“累计”天数?

回答

1

您可以使用Reduceaccumulate = TRUE

p_value <- do.call(rbind, lapply(Reduce(rbind, split(df, df$day), accumulate = TRUE), 
       function(i) wilcox.test(i$group_a, i$group_b, alternative = 'g')$p.value)) 
p_value 
#   [,1] 
#[1,] 0.7928919 
#[2,] 0.7768954 
#[3,] 0.7084401 

整洁的输出,

final_df <- data.frame(day = unique(df$day), p_value) 

final_df 
# day p_value 
#1 1 0.7928919 
#2 2 0.7768954 
#3 3 0.7084401 
3

使用:

for (i in unique(df$day)) { 
    df$p.val[df$day == i] <- wilcox.test(df[df$day %in% 1:i,]$group_a, df[df$day %in% 1:i,]$group_b, alternative = 'g')$p.value 
} 

你:

> df 
    day group_a group_b  p.val 
1 1  4  3 0.7928919 
2 1  2  4 0.7928919 
3 2  3  2 0.7768954 
4 2  1  2 0.7768954 
5 2  1  2 0.7768954 
6 3  4  2 0.7084401 
7 3  3  3 0.7084401 
8 3  2  4 0.7084401 
9 3  4  5 0.7084401 

或者当你只是想在一个概括数据帧三个p值:

vec <- sapply(unique(df$day), 
       function(i) wilcox.test(df[df$day %in% 1:i,]$group_a, 
             df[df$day %in% 1:i,]$group_b, 
             alternative = 'g')$p.value) 

df2 <- data.frame(day = unique(df$day), p.val = vec) 

这给:

> df2 
    day  p.val 
1 1 0.7928919 
2 2 0.7768954 
3 3 0.7084401 
0

这也适用于:

library(data.table) 
setDT(df) 
test_pvals <- sapply(as.list(unique(df[, day])), function(x){ 
    df[day <= x, wilcox.test(group_a, group_b, alternative = 'g')$p.val] 
}) 
data.table(day = df[, unique(day)], p.val = test_pvals) 
## day  p.val 
## 1: 1 0.7928919 
## 2: 2 0.7768954 
## 3: 3 0.7084401 
+0

不。再次阅读问题 – Sotos

+0

谢谢@索托斯。固定 –