我是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和其他相关函数)。
(然后我当然会纠正多重比较)
答案 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