【问题标题】:Apply a function to sequential pairs of columns in R将函数应用于 R 中的连续列对
【发布时间】:2014-08-28 17:41:02
【问题描述】:

我是 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)

如果有任何帮助和建议,我将不胜感激。

【问题讨论】:

  • 我不清楚想要的结果是什么。 names(tests1) &lt;- apply(matrix(names(df), nrow=2), 2, paste, collapse=" vs ") 不够吗?
  • @Roland 这是一种解决方案。至少我希望在输出中看到相关 t 检验的变量名称。但是,我也想知道是否有另一种方法可以通过变量的名称而不是索引来调用变量。谢谢。

标签: r lapply


【解决方案1】:

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

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

这样,结果列表的名称将是df 的奇数列的名称。

【讨论】:

    猜你喜欢
    • 2017-01-01
    • 2017-05-12
    • 1970-01-01
    • 2011-07-11
    • 2014-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-15
    相关资源
    最近更新 更多