将函数(stat测试)应用于每个因子水平的数据子集

将函数(stat测试)应用于每个因子水平的数据子集

问题描述:

我是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 - 家庭

一个选项。

首先,将数据分成不同的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