我是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)
我将不胜感激任何帮助和建议。
答案 0 :(得分:1)
您可以拆分数据框,然后使用mapply
:
col<-seq(1,ncol(df),by=2)
mapply(t.test,df[,col],df[,-col],MoreArgs=list(paired=TRUE))
通过这种方式,结果列表的名称将是df
的奇数库的名称。