我遇到的情况是,我的数据分布在两个数据帧之间,我需要先对其中一个数据帧的数据进行子集处理,然后在此子数据集与另一个数据集之间进行t检验。数据框。
我尝试使用%>%
和group_by()
选择想要的数据,然后尝试调用t检验,如下所示。
library(dplyr)
a <- c("AA","AA","AA","AB","AB","AB")
b <- c(1,2,3,1,2,3)
c <- c(12,34,56,78,90,12)
cols1 <- c("SampID", "Reps", "Vals")
df1 <- data.frame(a,b,c)
colnames(df1) <- cols1
df1
SampID Reps Vals
1 AA 1 12
2 AA 2 34
3 AA 3 56
4 AB 1 78
5 AB 2 90
6 AB 3 12
e <- c(1,2,3,4,5,6,7,8,9)
f <- c(11,22,33,44,55,66,77,88,99)
cols2 <- c("CtrlReps","CtrlVals")
df2 <- data.frame(e,f)
colnames(df2) <- cols2
df2
CtrlReps CtrlVals
1 1 11
2 2 22
3 3 33
4 4 44
5 5 55
6 6 66
7 7 77
8 8 88
9 9 99
df1 %>%
group_by(SampID) %>%
t.test(Vals, df2$CtrlVals, var.equal = FALSE)
但是,这将返回错误:
Error in match.arg(alternative) :
'arg' must be NULL or a character vector
我也尝试使用do
,但是也会返回错误:
outputs <- df1 %>%
group_by(SampID) %>%
do(tpvals = t.test(Vals, df2$CtrlVals, data = ., paired = FALSE, var.equal = FALSE)) %>%
summarise(SampID, pvals = tpvals$p.value)
Error in t.test(Vals, df2$CtrlVals, data = ., paired = FALSE, var.equal = FALSE) :
object 'Vals' not found
我是R的新手,我已经用光了Google-Fu,所以我不知道发生了什么。据我所知,这两个错误是无关紧要的,我认为,但是解决一个或另一个错误可以使我摆脱困境。我就是不知道我也确信解决此问题将使我立即陷入下一个问题(本文实际解决的问题)。
非常感谢您的投入/指导/帮助!
答案 0 :(得分:1)
您对do
的尝试已结束,可以通过执行以下操作来解决:
outputs <- df1 %>%
group_by(SampID) %>%
do(tpvals = t.test(.$Vals, df2$CtrlVals,
paired = FALSE, var.equal = FALSE)) %>%
summarise(SampID, pvals = tpvals$p.value)
您需要.$Vals
才能到达Vals
内的do
列,它的工作方式与mutate
不太相同。 data
的{{1}}参数在这里也没有用,因为您在同一个数据框中没有两个变量,因此不能将它们都放在公式中。
结果:
t.test