我有一种情况,我有数据分布在两个数据帧之间,我需要先从一个数据帧中的数据子集,然后在这个子集数据和另一个数据帧中的(整个)数据之间进行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,所以我不知道发生了什么。据我所知,这两个错误是不相关的,我认为,但是解决一个或另一个错误给了我一条出路。我只是不知道如何解决。我也确信解决这个问题会让我立即陷入下一个问题(这篇文章实际解决的问题)。
您的意见/指导/帮助将不胜感激!
您对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
来获取do
中的Vals
列,它的工作方式与mutate
不完全相同。t. test
的data
参数在这里也没有用,因为您没有两个变量在同一个数据框中,所以您不能将它们都放在公式中。
结果:
> outputs
# A tibble: 2 x 2
SampID pvals
<fct> <dbl>
1 AA 0.253
2 AB 0.862