R 数据帧中应用函数对基因的T检验

R 数据帧中应用函数对基因的T检验,r,dataframe,p-value,R,Dataframe,P Value,我正在尝试对两个数据帧进行t检验 dataframes(我从data.frame中提取)包含我需要的数据,这些数据位于第1:143行。我已经创建了计算rowMeans所需的子变量 > c.mRNA<-rowMeans(c007[1:143,(4:9)]) > h.mRNA<-rowMeans(c007[1:143,(10:15)]) 我的语法有问题,我一辈子都搞不懂 编辑:我已经创建了一个data.frame,所以它现在只有两列,每行需要一个p值。下面是我的数据样本

我正在尝试对两个数据帧进行t检验

dataframes(我从data.frame中提取)包含我需要的数据,这些数据位于第1:143行。我已经创建了计算rowMeans所需的子变量

> c.mRNA<-rowMeans(c007[1:143,(4:9)])
> h.mRNA<-rowMeans(c007[1:143,(10:15)])
我的语法有问题,我一辈子都搞不懂

编辑:我已经创建了一个data.frame,所以它现在只有两列,每行需要一个p值。下面是我的数据样本

      c.mRNA    h.mRNA
1    8.224342  8.520142
2    9.096665 11.762597
3   10.698863 10.815275
4   10.666233 10.972130
5   12.043525 12.140297
我试过这个

 pvals=apply(mRNA143.data,1,function(x) {t.test(mRNA143.data[,1],mRNA143.data[, 2])$p.value})

但是我可以从我的图中看出我是错的(图是一条直线)。

一个可复制的例子会有很长的路要走。在准备过程中,您可能已经意识到,您正在尝试根据平均值对列进行子集,这实际上是没有意义的

您要做的是遍历数据行、属于某个组的子集列,对第二个组重复上述操作,并将其传递给t.test函数

我会这样做的

group1 <- matrix(rnorm(50, mean = 0, sd = 2), ncol = 5)
group2 <- matrix(rnorm(50, mean = 5, sd = 2), ncol = 5)

xy <- cbind(group1, group2)

# this is just a visualization of the test you're performing
plot(0, 0, xlim = c(-5, 11), ylim = c(0, 0.25), type = "n")
curve(dnorm(x, mean = 5, sd = 2), add = TRUE)
curve(dnorm(x, mean = 0, sd = 2), add = TRUE)

out <- apply(xy, MARGIN = 1, FUN = function(x) {
  # x is a vector, e.g. xy[i, ] or xy[1, ]
  t.test(x = x[1:5], y = x[6:10])$p.value
})
out

group1请通过共享一个最小的数据集来回答您的问题,以便社区能够更好地帮助您。我下面的代码得到的是对所有143行重复进行一次t检验,而不是对每行中的数据进行一次新的t检验<代码>>应用(mRNA143.data,1,函数(x)t.test(mRNA143.data[1:143,1:1],mRNA143.data[1:143,2:2])$p.value)
我已经能够为每行计算t.test<代码>t.test.mRNA143.dataRoman-我知道您是如何创建一个名为xy的新变量的。在编写代码段时,我是否保留函数(x)并用group1替换x,用group2替换y?非常感谢@Oars
xy
是您的目标
FUN
参数被传递给一个匿名函数。此匿名函数中的参数(在本例中为
x
)应与其主体中的参数匹配(例如
x[1:5]
)。这是函数的优点。您可以更改输入,但在函数体中,一切都是可预测的。
 pvals=apply(mRNA143.data,1,function(x) {t.test(mRNA143.data[,1],mRNA143.data[, 2])$p.value})
group1 <- matrix(rnorm(50, mean = 0, sd = 2), ncol = 5)
group2 <- matrix(rnorm(50, mean = 5, sd = 2), ncol = 5)

xy <- cbind(group1, group2)

# this is just a visualization of the test you're performing
plot(0, 0, xlim = c(-5, 11), ylim = c(0, 0.25), type = "n")
curve(dnorm(x, mean = 5, sd = 2), add = TRUE)
curve(dnorm(x, mean = 0, sd = 2), add = TRUE)

out <- apply(xy, MARGIN = 1, FUN = function(x) {
  # x is a vector, e.g. xy[i, ] or xy[1, ]
  t.test(x = x[1:5], y = x[6:10])$p.value
})
out