2015-11-01 4 views
1

Я хочу применить wilcox.test к каждой строке двух моих данных в R. Например, для строки 1 в df1 и строке 1 в df2, чтобы увидеть, отличаются ли они. У меня есть сотни строк и ожидайте, что сотни P-значений станут результатом. Есть 105 столбцов. Я не совсем уверен, как написать команду, которая выполняет тест для каждой из моих пар строк, поскольку их сотни. Любая помощь приветствуется!Wilcox.test между кадрами данных в R

ответ

0

Используя следующие данные в качестве примера:

#2 numeric data.frames (all columns are numeric) 
#5 rows and 100 columns 
set.seed(5) 
df1 <- as.data.frame(matrix(runif(500), nrow=5, ncol=100)) 
df2 <- as.data.frame(matrix(runif(500), nrow=5, ncol=100)) 

Solution

#A single lapply is enough to run the wilcox test for each row 
lapply(1:nrow(df1), function(i) { 
    #you run the wilcox.test for each pair of rows and return the p.value 
    wilcox.test(as.numeric(df1[i, ]), as.numeric(df2[i, ]))$p.value 
}) 

Выход:

> lapply(1:nrow(df1), function(i) { 
+ wilcox.test(as.numeric(df1[i, ]), as.numeric(df2[i, ]))$p.value 
+ }) 
[[1]] 
[1] 0.8690001 

[[2]] 
[1] 0.1390142 

[[3]] 
[1] 0.7479788 

[[4]] 
[1] 0.5340455 

[[5]] 
[1] 0.8459806 
+0

@LysandeR Привет, я абсолютный новичок, и я не могу вполне следует. Кадры данных имеют следующие размеры:> dim (A) [1] 700 150 > dim (B) [1] 700 50 Я попытался использовать функцию lapply с замененными именами фреймов, и я получаю: Ошибка: неожиданный '} «in» lapply (1: nrow (A), function (i) {wilcox.test (as.numeric (A [i,]), as.numeric (B [i,]) $ p.value} " – magsd

+0

Вы отсутствуют два скобки .... 'lapply (1: nrow (A), function (i) {wilcox.test (as.numeric (A [i,]), as.numeric (B [i,])) $ p.value}) '. Попробуйте это, и он будет работать. Всякий раз, когда вы видите« неожиданное »или), это означает, что вы забыли закрыть скобку. – LyzandeR

Смежные вопросы