2016-09-30 79 views
0

我是R新手。我查看了許多類似的問題,但沒有找到任何有助於我解決問題的方法。將函數(stat測試)應用於每個因子水平的數據子集

說我有一個數據幀DAT創建像這樣:/

 v1 v2 dv id 
    1 a x 40 p1 
    2 a x 99 p2 
    3 b x 67 p1 
    4 b x 24 p2 
    5 a y 16 p1 
    6 a y 51 p2 
    7 b y 85 p1 
    8 b y 72 p2 
    9 a z 33 p1 
    10 a z 31 p2 
    11 b z 88 p1 
    12 b z 50 p2 

我想,每個條件VAR2的水平,:

dat <- data.frame(v1=rep(c("a","a","b","b"),3), v2=c(rep("x",4),rep("y",4),rep("z",4)), dv=sample(1:100, 12), id=rep(c("p1","p2"),6)) 

...看起來像這樣在測試中針對var1的條件a &b之間的差異進行測試。 我可以通過var2的級別對數​​據框進行子集化,然後通過在var1的條件a & b之間應用差異的t檢驗來循環,但據我所知,R的一個優點是避免循環(使用apply和其他相關功能)。

(那我就進行多重比較,當然是正確的),你必須是所謂的apply - 家庭

回答

0

一個選項。

首先,將數據分成不同的v1 s,然後將函數應用於所有子集。

既然你要進行的變量t.test「DV」的做法將是這樣的:

split_dat <- split(dat, dat$v2) 

sapply(split_dat, function(sub_dat) { 
    result <- t.test(sub_dat[sub_dat$v1 == "a", "dv"], 
        sub_dat[sub_dat$v1 == "b", "dv"]) 

    return(result$p.value) 
}) 

# Result: 
#   x   y   z 
# 0.1220663 0.6092622 0.8887763 
+0

只是我後,由於負荷 – hitchhiker

相關問題