gpt4 book ai didi

r - 对固定大小的 block 进行简单平均

转载 作者:行者123 更新时间:2023-12-05 04:18:10 28 4
gpt4 key购买 nike

我是 R 的新手,正在尝试用它来处理一些光谱数据。我的数据按行排列,给定样本的每个光谱都在单独的列中。数据如下所示:

   Plant  Spec1  Spec2  Spec3  Spec4  Spec5  Spec6  Spec7  Spec8  Spec9 Spec10 Spec11 
1 samp1 0.0422 0.0475 0.0453 0.0426 0.0472 0.0527 0.0498 0.0424 0.0423 0.0434 0.0463

我有很多植物样本(samp1samp10000)和大约 2000 spec# 读数。我想计算每个样本 5 个规范读数 block 的简单平均值(spec1 到 spec 5,然后是 spec6 到 spec10),即平均每 5 个列读数单独的行。

我考虑过转置数据,但是我随后必须通过将每个 5 block 平均值除以每株植物的平均光谱读数 (spec1-spec2000) 来标准化 5 block 简单平均数据样本。

关于我如何进行 R 编码的任何建议?

最佳答案

这是一种非常简单的方法。

首先,一些示例数据:

set.seed(1)
x <- cbind(Plant = letters[1:5],
as.data.frame(matrix(rnorm(60), ncol = 12)))
x
# Plant V1 V2 V3 V4 V5 V6
# 1 a -0.6264538 -0.8204684 1.5117812 -0.04493361 0.91897737 -0.05612874
# 2 b 0.1836433 0.4874291 0.3898432 -0.01619026 0.78213630 -0.15579551
# 3 c -0.8356286 0.7383247 -0.6212406 0.94383621 0.07456498 -1.47075238
# 4 d 1.5952808 0.5757814 -2.2146999 0.82122120 -1.98935170 -0.47815006
# 5 e 0.3295078 -0.3053884 1.1249309 0.59390132 0.61982575 0.41794156
# V7 V8 V9 V10 V11 V12
# 1 1.35867955 -0.4149946 -0.1645236 -0.7074952 0.3981059 1.9803999
# 2 -0.10278773 -0.3942900 -0.2533617 0.3645820 -0.6120264 -0.3672215
# 3 0.38767161 -0.0593134 0.6969634 0.7685329 0.3411197 -1.0441346
# 4 -0.05380504 1.1000254 0.5566632 -0.1123462 -1.1293631 0.5697196
# 5 -1.37705956 0.7631757 -0.6887557 0.8811077 1.4330237 -0.1350546

其次,找出“组”列。使用 gl 创建列组:

myBreaks <- gl(ceiling((ncol(x)-1)/5), 5)[1:(ncol(x)-1)]

我们可以在 sapply 中利用这些信息,我们可以方便地使用 rowMeans 来获取您要查找的值。

cbind(x[1], 
sapply(levels(myBreaks), function(y) {
rowMeans(x[-1][myBreaks == y])
}))
# Plant 1 2 3
# 1 a 0.18778055 0.0031074991 1.1892529
# 2 b 0.36537233 -0.1083305812 -0.4896239
# 3 c 0.05997134 0.0646204262 -0.3515075
# 4 d -0.24235365 0.2024774526 -0.2798217
# 5 e 0.47255547 -0.0007180433 0.6489845

关于r - 对固定大小的 block 进行简单平均,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17227802/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com