2017-02-11 89 views
0

我有兩個單獨的列表,每個列表包含4個data.frames。我需要在兩個列表中的每個數據幀之間執行學生的t檢驗(t.testrainfall在兩個列表中包含的數據幀之間執行Student t檢驗

這裏列出:

lst1 = list(data.frame(rnorm(20), rnorm(20)), data.frame(rnorm(25), rnorm(25)), data.frame(rnorm(16), rnorm(16)), data.frame(rnorm(34), rnorm(34)))  
lst1 = lapply(lst1, setNames, c('rainfall', 'snow')) 

lst2 = list(data.frame(rnorm(19), rnorm(19)), data.frame(rnorm(38), rnorm(38)), data.frame(rnorm(22), rnorm(22)), data.frame(rnorm(59), rnorm(59))) 
lst2 = lapply(lst2, setNames, c('rainfall', 'snow')) 

什麼,我需要做的是:

t.test(lst1[[1]]$rainfall, lst2[[1]]$rainfall) 
t.test(lst1[[2]]$rainfall, lst2[[2]]$rainfall) 
t.test(lst1[[3]]$rainfall, lst2[[3]]$rainfall) 
t.test(lst1[[4]]$rainfall, lst2[[4]]$rainfall) 

我可以通過編寫各4個data.frames的做如上(其實我有40與我的真實數據),但我想知道是否存在一個更聰明,更快捷的方式來做到這一點。

這裏下面是我的嘗試(沒有成功):

myfunction = function(x,y) { 
    test = t.test(x, y) 
    return(test) 
} 

result = mapply(myfunction, x=lst1, y=lst2) 
+1

請提供可重複的樣品供人一起工作。 – lmo

+0

是的,@Imo是對的。人們只能猜測沒有。 – BigDataScientist

+0

完成。謝謝 – aaaaa

回答

0

爲我工作。我會使用simplify = FALSE以獲得格式更好的結果。

lst1 <- list() 
lst1[[1]] <- data.frame(rainfall = rnorm(10)) 
lst1[[2]] <- data.frame(rainfall = rnorm(10)) 
lst2 <- list() 
lst2[[1]] <- data.frame(rainfall = rnorm(10)) 
lst2[[2]] <- data.frame(rainfall = rnorm(10)) 

myfunction = function(x,y) { 
    test = t.test(x$rainfall, y$rainfall) 
    return(test) 
} 

mapply(myfunction, x = lst1, y = lst2, SIMPLIFY = FALSE) 
+0

data.frames包含不同數量的觀察值,請參閱我的示例。謝謝 – aaaaa

1
x <- NULL 
for (i in seq_along(lst1)){ 
    x[[i]] <- t.test(lst1[[i]]$rainfall, lst2[[i]]$rainfall) 
} 
x 
+0

當給出答案時,最好給出[一些解釋爲什麼你的答案](http://stackoverflow.com/help/how-to-answer)是一個。 –