R 对ggplot2中的特定数据执行统计测试

R 对ggplot2中的特定数据执行统计测试,r,ggplot2,R,Ggplot2,我编写了一个使用ggplot2生成绘图的脚本,在每个绘图中都有多个x轴值,每个x轴值在y轴上都有多个值,用于该轴上的多个变量 我将以另一种方式问这个问题:我在一个for循环中生成了一个数据帧中的多个子集,如何控制for的循环以生成另一个数据帧,该数据帧在每一行中包含前一个数据帧的第一列的值 for (x in phy) { print(x) test<-subset(t, Phylum==x) dat <- melt(test, measure=c("A",

我编写了一个使用ggplot2生成绘图的脚本,在每个绘图中都有多个x轴值,每个x轴值在y轴上都有多个值,用于该轴上的多个变量

我将以另一种方式问这个问题:我在一个for循环中生成了一个数据帧中的多个子集,如何控制for的循环以生成另一个数据帧,该数据帧在每一行中包含前一个数据帧的第一列的值

for (x in phy) {
    print(x)

    test<-subset(t, Phylum==x)
    dat <- melt(test, measure=c("A","C","G","T","(A-T)/(A+T)","(G-C)/(G+T)",
                                "(A+T)/(G+C)"))
    unitest <- unique(c(test$Class))
    #print(nrow(test))
    i <- 1
    for(y in unitest) {
        towork <- subset(test, Class==y)

        # here i want to create a data frame that will contain (in each row, the
        # value of the first column of the towork subset for each y)

        # atest=wilcox.test(towork$A,towork$A, correct=FALSE)
        # print(paste(paste(y,towork$A),towork$A))
    }
}



input:

    e.g 
    class1:
    0.268912    0.158921    0.214082    0.358085
    1.680946         0.314681   0.210526    0.166895
    0.286945    0.322006    0.147361    0.243688
    class2
    0.293873    0.327516    0.156235    0.222376    
    0.327430    0.308667    0.135710    0.227695    
    0.301488    0.326511    0.125865    0.246022    
    0.310980    0.308730    0.148861    0.231429
等等。。。 然后是另一个数据帧,每行包含每个类的第二列 等等

然后我想对新数据帧的每两行执行一次统计测试,例如Wilcoxon秩和测试,并得到结果

任何帮助都将不胜感激

Hello , i came up with an idea , but i need your help to do it.
first the data is in a large text file and i will upload it if you want , my idea is : create a function that take 2 argument : 
1.the name of the column which should be used for grouping the data (e.g. phylum, or class)
2. the name of the column containing the data to test (e.g. A,C,G,T)
and i will test the data for each phylum first , and if i want i will test it for each class in each phylum.
that's mean,i will take the A column for first phylum and A column for 2nd phylum and make the wilcox.test on them ,  and i will make the process for each common column in each phylum. and then i will use a subset function to test the classes inside each phylum.  
give me your opininon with this ??

提前通知。

我想这会满足您的要求。我们不一定需要为四个感兴趣的变量创建新的data.frames——我们可以从class1和class2中各自的位置提取感兴趣的列。代码已经更新以查找class1和class2之间的公共列。它将只计算这些公共列的wilcox测试

class1 <- matrix(rnorm(12), ncol = 4)
class2 <- matrix(rnorm(16), ncol = 4)

computeWilcox <- function(x, y, correct = FALSE, ...) {

    if (!is.numeric(x)) stop("x must be numeric.")
    if (!is.numeric(y)) stop("y must be numeric.")

    commonCols <- intersect(colnames(x), colnames(y))

    ret <- vector("list", length(commonCols))

    for (col in 1:length(commonCols)) {
        ret[[col]] <- wilcox.test(x[, col], y[, col], correct = correct, ...)
    }

    names(ret) <- commonCols
    return(ret)
}


zz <- computeWilcox(class1, class2)
您可以从返回的列表对象中提取参数或p值,如下所示:

> zz$c$p.value
[1] 0.05714286

我想这会满足你的要求。我们不一定需要为四个感兴趣的变量创建新的data.frames——我们可以从class1和class2中各自的位置提取感兴趣的列。代码已经更新以查找class1和class2之间的公共列。它将只计算这些公共列的wilcox测试

class1 <- matrix(rnorm(12), ncol = 4)
class2 <- matrix(rnorm(16), ncol = 4)

computeWilcox <- function(x, y, correct = FALSE, ...) {

    if (!is.numeric(x)) stop("x must be numeric.")
    if (!is.numeric(y)) stop("y must be numeric.")

    commonCols <- intersect(colnames(x), colnames(y))

    ret <- vector("list", length(commonCols))

    for (col in 1:length(commonCols)) {
        ret[[col]] <- wilcox.test(x[, col], y[, col], correct = correct, ...)
    }

    names(ret) <- commonCols
    return(ret)
}


zz <- computeWilcox(class1, class2)
您可以从返回的列表对象中提取参数或p值,如下所示:

> zz$c$p.value
[1] 0.05714286

@abd-请提供样本输入数据和预期输出。对运行代码所需的任何对象使用dput。@蔡斯:谢谢您的回复。每个y包含以下变量:A C G T,例如0.268912 0.158921 0.214082 0.358085-0.142223 0.096408 1.680946 0.314681 0.210526 0.166895 0.307898 0。010895@Chase:谢谢你的回复,我刚刚编辑了这个问题,忘记了我之前的评论,谢谢advance@Chase:你好,蔡斯,我的问题有解决办法吗??谢谢。答案几乎肯定是肯定的,但仍然不清楚你想要什么。顶部for循环中的melt引用了7个度量变量,这意味着data.frames中至少有7个变量,但底部的示例data.frames仅包含四列。您要做的是取class1的第一列并用class2的第一列计算wilcox.test吗?data.frames中的其他列呢?您还想为他们计算wilcox.test吗?@abd-请输入数据和预期输出样本。对运行代码所需的任何对象使用dput。@蔡斯:谢谢您的回复。每个y包含以下变量:A C G T,例如0.268912 0.158921 0.214082 0.358085-0.142223 0.096408 1.680946 0.314681 0.210526 0.166895 0.307898 0。010895@Chase:谢谢你的回复,我刚刚编辑了这个问题,忘记了我之前的评论,谢谢advance@Chase:你好,蔡斯,我的问题有解决办法吗??谢谢。答案几乎肯定是肯定的,但仍然不清楚你想要什么。顶部for循环中的melt引用了7个度量变量,这意味着data.frames中至少有7个变量,但底部的示例data.frames仅包含四列。您要做的是取class1的第一列并用class2的第一列计算wilcox.test吗?data.frames中的其他列呢?你还想为它们计算wilcox.test吗?@Chase:你好,我想从中提取数据的类对于每个门都是动态变化的,因为每个门都有不同数量的类,我想做的是wilcox.test将同时应用于每个门的2个类1和2,3和4,,并在打印pdf中显示结果。这是可以做到的吗??thanks@Chase:您好,这正是我想要的,但仍然缺少一件事,我应该如何自动化每个门的类测试过程??因为每个门都有一个以上的类,每个类有4个列A,C,G,T,我想一起测试每个门的每个2个类的每个列,以及每个门的每个2个类的每个列,如何做到这一点??很抱歉打扰您:S@abd-这将取决于数据来自何处以及您在工作环境中如何构建数据。一切都在一个大数据框架内吗?很多小数据帧?包含data.frames的列表对象?解决方案可能需要调用apply或某些分组函数,但如果没有数据的代表性示例,就无法确定。如果你回到m
y首先注释并输出您试图处理的对象的内容-这将是最简单的前进方式。dput将允许其他人简单地复制和粘贴对象R@Chase:我编辑了我的问题,因为我写的内容非常大,你可以在代码标签中找到它。等待您的意见开始工作并获得您的帮助:,thanks@Chase:mediafire.com/?3m3mataw9nlzm1m这是包含整个data@Chase:您好,我要从中提取数据的类对于每个门都是动态变化的第一个对于soo每个门都有不同数量的类,我想做的是,wilcox.test将应用于每个门的两个类,第一和第二,第三和第四,…,并在绘图pdf中显示结果。这是可以做到的吗??thanks@Chase:您好,这正是我想要的,但仍然缺少一件事,我应该如何自动化每个门的类测试过程??因为每个门都有一个以上的类,每个类有4个列A,C,G,T,我想一起测试每个门的每个2个类的每个列,以及每个门的每个2个类的每个列,如何做到这一点??很抱歉打扰您:S@abd-这将取决于数据来自何处以及您在工作环境中如何构建数据。一切都在一个大数据框架内吗?很多小数据帧?包含data.frames的列表对象?解决方案可能需要调用apply或某些分组函数,但如果没有数据的代表性示例,就无法确定。如果你回到我的第一条评论,然后写出你想要处理的对象的内容,这将是最简单的方法。dput将允许其他人简单地复制和粘贴对象R@Chase:我编辑了我的问题,因为我写的内容非常大,你可以在代码标签中找到它。等待您的意见开始工作并获得您的帮助:,thanks@Chase:mediafire.com/?3m3mataw9nlzm1m这是包含整个数据的文件