Со следующими двумя наборами данных,
data
X1 X2 X3 X4 X5 X6 X7
1 1 2 2 1 1 2 2
3 1 1 1 1 2 2 2
4 2 1 2 1 2 2 1
И
new.data
v1 v2 v3 v4 v5
1 10 50 10 0 1
2 15 30 15 1 2
3 14 40 12 0 2
4 20 25 8 1 2
5 24 38 14 0 1
6 28 27 11 1 1
7 29 15 1 0 2
8 15 5 5 1 1
Я хотел бы найти значение p для каждой переменной (V1-V3)
для каждой строки data
с использованием функции t.test()
и для v4-v5
с использованием функции wilcox.test()
.Я могу сделать это отдельно, как показано ниже:
p_value=matrix(NA, nrow=nrow(dty), ncol=ncol(new.data)-2)
for (iter in 1:nrow(dty)){
for ( v in 1:(ncol(new.data)-2)){
p_value[iter,v]=(t.test(new.data[,v][c(which(dty[iter,]=="1"))], new.data[,v][c(which(dty[iter,]=="2"))], alternative = "two.sided", var.equal = FALSE))$p.val
}
}
p_value
[,1] [,2] [,3]
[1,] 0.574490940 0.33859440 0.8054510
[2,] 0.005069568 0.32542488 0.5887188
[3,] 0.707848017 0.06346828 0.4529153
Для переменных v4 и v5
p_v4= numeric()
for (iter in 1:nrow(dty)){
p_v4[iter]=(wilcox.test(new.data$v4[c(which(dty[iter,]=="1"))], new.data$v4[c(which(dty[iter,]=="2"))], alternative="two.sided"))$p.val
}
> p_v4
[1] 0.8382565 0.8382565 0.4142162
p_v5= numeric()
for (iter in 1:nrow(dty)){
p_v5[iter]=(wilcox.test(new.data$v5[c(which(dty[iter,]=="1"))], new.data$v5[c(which(dty[iter,]=="2"))], alternative="two.sided"))$p.val
}
> p_v5
[1] 0.4142162 0.4142162 0.1024704
Наконец, я объединяю их вместе
p.val_mat=cbind(p_value,p_v4,p_v5)
p.val_mat
p_v4 p_v5
[1,] 0.574490940 0.33859440 0.8054510 0.8382565 0.4142162
[2,] 0.005069568 0.32542488 0.5887188 0.8382565 0.4142162
[3,] 0.707848017 0.06346828 0.4529153 0.4142162 0.1024704
Могу ли ясделать это одним циклом или с помощью любой другой функции?Благодарим Вас за помощь.