r - 使用 apply 来做到这一点的方法?

标签 r lapply sapply mapply

我想对不同数据帧中的每一行取平均值。有谁知道使用 apply 语句更聪明的方法来做到这一点?抱歉,代码之墙。

您需要为每个 hiXXXX 文件提供一个 1000:1006 的向量,然后为列提供一个 2:13 的向量。我以前用过 mapply 来做一些像这样奇怪的事情,所以也许可以以某种方式做到这一点?

for (i in 1:nrow(subavg)) {
    subavg[i,c(2)] <- mean(c(hi1000[i,c(2)],hi1001[i,c(2)],hi1002[i,c(2)],hi1003[i,c(2)],hi1004[i,c(2)],hi1005[i,c(2)],hi1006[i,c(2)]))
    subavg[i,c(3)] <- mean(c(hi1000[i,c(3)],hi1001[i,c(3)],hi1002[i,c(3)],hi1003[i,c(3)],hi1004[i,c(3)],hi1005[i,c(3)],hi1006[i,c(3)]))
    subavg[i,c(4)] <- mean(c(hi1000[i,c(4)],hi1001[i,c(4)],hi1002[i,c(4)],hi1003[i,c(4)],hi1004[i,c(4)],hi1005[i,c(4)],hi1006[i,c(4)]))
    subavg[i,c(5)] <- mean(c(hi1000[i,c(5)],hi1001[i,c(5)],hi1002[i,c(5)],hi1003[i,c(5)],hi1004[i,c(5)],hi1005[i,c(5)],hi1006[i,c(5)]))
    subavg[i,c(6)] <- mean(c(hi1000[i,c(6)],hi1001[i,c(6)],hi1002[i,c(6)],hi1003[i,c(6)],hi1004[i,c(6)],hi1005[i,c(6)],hi1006[i,c(6)]))
    subavg[i,c(7)] <- mean(c(hi1000[i,c(7)],hi1001[i,c(7)],hi1002[i,c(7)],hi1003[i,c(7)],hi1004[i,c(7)],hi1005[i,c(7)],hi1006[i,c(7)]))
    subavg[i,c(8)] <- mean(c(hi1000[i,c(8)],hi1001[i,c(8)],hi1002[i,c(8)],hi1003[i,c(8)],hi1004[i,c(8)],hi1005[i,c(8)],hi1006[i,c(8)]))
    subavg[i,c(9)] <- mean(c(hi1000[i,c(9)],hi1001[i,c(9)],hi1002[i,c(9)],hi1003[i,c(9)],hi1004[i,c(9)],hi1005[i,c(9)],hi1006[i,c(9)]))
    subavg[i,c(10)] <- mean(c(hi1000[i,c(10)],hi1001[i,c(10)],hi1002[i,c(10)],hi1003[i,c(10)],hi1004[i,c(10)],hi1005[i,c(10)],hi1006[i,c(10)]))
    subavg[i,c(11)] <- mean(c(hi1000[i,c(11)],hi1001[i,c(11)],hi1002[i,c(11)],hi1003[i,c(11)],hi1004[i,c(11)],hi1005[i,c(11)],hi1006[i,c(11)]))
    subavg[i,c(12)] <- mean(c(hi1000[i,c(12)],hi1001[i,c(12)],hi1002[i,c(12)],hi1003[i,c(12)],hi1004[i,c(12)],hi1005[i,c(12)],hi1006[i,c(12)]))
    subavg[i,c(13)] <- mean(c(hi1000[i,c(13)],hi1001[i,c(13)],hi1002[i,c(13)],hi1003[i,c(13)],hi1004[i,c(13)],hi1005[i,c(13)],hi1006[i,c(13)]))
}

最佳答案

由于只有 7 个数据集,我们可以将其用作 Map 的参数,然后cbind 它,并获取 rowMeans

Map(function(...) rowMeans(cbind(...)), hi1000, hi1001, hi1002, hi1003, 
                     hi1004, hi1005, hi1006)

或者在获取列表中的数据集后使用+Reduce,然后除以数据集总数,即7

Reduce(`+`, mget(paste0("hi", 1000:1006)))/7

第二个解决方案更紧凑,但如果数据集中有 NA,最好使用第一个解决方案,因为 rowMeansna.rm 参数。默认情况下它是FALSE,但我们可以将其设置为TRUE

关于r - 使用 apply 来做到这一点的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38421998/

相关文章:

r - 将 flexdashboard 中的 R markdown 标题链接到应用程序中的页面

r - 堆叠条形图与 R 中的线

r - 合并两个空间对象的 ID 以创建等值线图

r - 分割并重新连接字符串

r - R 中列表对象与 apply 函数之间的操作

R: sapply 有效,但 lapply 无效

r - 在 R 中,如何拆分向量中的每个字符串以返回第 N 个字符实例之前的所有内容?

r - 如何在嵌套的 lapply/sapply 函数中附加值?

r - 使用用户定义的函数在 r 中应用