将函数(stat test)应用于每个因子级别的数据子集

时间:2016-09-30 14:45:35

标签: r

我是R的新手。我查看了很多类似的问题,但没有找到任何帮助我解决问题的方法。

假设我有一个像这样创建的数据框数据:

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))

......看起来像这样:

        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的每个条件/级别,我想对var1的条件a和b之间的差异进行t检验。 我可以通过按var2的级别对数​​据帧进行子集化,然后通过在条件a和&amp;之间应用差异的t检验来循环。 var1的b,但据我所知,R的一个优点是避免循环(使用apply和其他相关函数)。

(然后我当然会纠正多重比较)

1 个答案:

答案 0 :(得分:0)

您拥有的一个选项是所谓的apply - 家庭。

首先,您将数据拆分为不同的v1,然后将函数应用于所有子集。

鉴于你想对变量&#34; dv&#34;进行t.test方法是这样的:

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