将函数应用于R中的连续列对

时间:2014-08-28 17:41:03

标签: r lapply

我是R和编程的新手。我试图在连续的列对上应用函数(配对t检验),并希望输出使用列名而不是索引。我有一个包含100行和60列的data.frame。作为一个较小的示例,假设以下数据集:

df <- data.frame(a1=rnorm(100, mean=60, sd=9),
                 a2=rnorm(100, mean=60, sd=9),
                 b1=rnorm(100, mean=65, sd=8),
                 b2=rnorm(100, mean=65, sd=8),
                 c1=rnorm(100, mean=75, sd=15),
                 c2=rnorm(100, mean=70, sd=15),
                 d1=rnorm(100, mean=75, sd=12),
                 d2=rnorm(100, mean=70, sd=12))

我已设法运行t测试,但以下代码(来自对另一个问题https://stackoverflow.com/a/9661591的回答)使用变量索引来报告结果:

tests1 <- lapply(seq(1,ncol(df), by=2), 
                   function (x){t.test(df[,x],df[,x+1],paired=TRUE)})
print(tests1)

我已尝试使用sapply进行以下操作,但它没有在输出中提供列名:

tests2 <- sapply(seq(1,ncol(df), by=2), 
                   function (x){t.test(df[,x],df[,x+1])},
                   simplify=FALSE,
                   USE.NAMES=TRUE)
print(tests2)

我将不胜感激任何帮助和建议。

1 个答案:

答案 0 :(得分:1)

您可以拆分数据框,然后使用mapply

    col<-seq(1,ncol(df),by=2)
    mapply(t.test,df[,col],df[,-col],MoreArgs=list(paired=TRUE))

通过这种方式,结果列表的名称将是df的奇数库的名称。