R:dplyr使用管道选择数据,并对来自外部管道对象的数据进行t检验

时间:2018-11-01 23:45:17

标签: r dplyr

我遇到的情况是,我的数据分布在两个数据帧之间,我需要先对其中一个数据帧的数据进行子集处理,然后在此子数据集与另一个数据集之间进行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,所以我不知道发生了什么。据我所知,这两个错误是无关紧要的,我认为,但是解决一个或另一个错误可以使我摆脱困境。我就是不知道我也确信解决此问题将使我立即陷入下一个问题(本文实际解决的问题)。

非常感谢您的投入/指导/帮助!

1 个答案:

答案 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