R中的人如何在矩阵上使用“ if”语句应用“ for”函数以创建平滑函数

yo阳

所以这是我的问题:

我有一个很大的csv文件,其中包含很多数据点。每行代表属于实验的值。

       col1 , col2, col3, col4, col5, col6, ..., coln-1, coln
exp_1  190    10000  845   20    100   67   ..., 2       634
exp_2    3      567   87   465   23    867  ..., 987     43
   .
   .
   .

每个实验都可以用直方图表示,但是需要通过四个邻居的平均值对值进行平滑处理。因此,例如处的值845matrix[1,3]将被覆盖mean(matrix[1,1]:matrix[1,5])发生的问题是在位置matrix[1,1]因为没有左邻居,所以平滑不起作用,并引发错误。由于这些列代表的圆形尺寸从360°的值coln实际代表的左邻居col1

如果我提取exp_1矩阵(x=matrix[1,]的向量并将其作为以下代码的输入参数,则一切运行顺利。

for ( i in 1:length(x)){
  if (i < 2) {
    x[i] = mean(c(x[i:(i+2)],x[(length(x)-i):(length(x))]))
  } else if (i >= 2){
    x[i] = mean(x[(i-2):(i+2)])
  } else if (i > (length(x)-2)){
    x[i] = mean(c(x[(i-2):i],x[1:abs(length(x)-(i+2))]))
  }
}

由于我的矩阵有大量的实验,因此我想循环遍历矩阵,而不是单枪匹马抽出每一行并在其上运行脚本。因此,我尝试将脚本写入函数,如下所示:

smoothing_function = function(x){
for ( i in 1:length(x)){
  if (i < 2) {
    x[i] = mean(c(x[i:(i+2)],x[(length(x)-i):(length(x))]))
  } else if (i >= 2){
    x[i] = mean(x[(i-2):(i+2)])
  } else if (i > (length(x)-2)){
    x[i] = mean(c(x[(i-2):i],x[1:abs(length(x)-(i+2))]))
  }
}
}

然后我想得到apply(matrix,1,smoothing_function)什么结果NULL我还尝试了整个矩阵的每一列的mapply(smoothing_function,matrix)结果NULL

我认为问题出在length(x)零件内部,因为输入参数不是向量而是单个元素。因此,该函数无法计算任何邻居的平均值,因为单个元素的长度为1

因此,要么我需要为矩阵中的每个实验生成一个向量,要么需要修改我的函数。你们有什么主意吗?

塞特

避免循环和if条件的一种可能性是创建一个新的矩阵,在该矩阵中,将最后两列粘贴在开头,将前两列粘贴在结尾。

这是一个小例子。首先,我使用rpois以下命令创建一些toydata

set.seed(1)
my_matrix <- matrix(rpois(20, 10), 2, 10)
colnames(my_matrix) <- paste0("col", 1:10)
my_matrix

     col1 col2 col3 col4 col5 col6 col7 col8 col9 col10
[1,]    8    7   14   11   14    8    8    7   11    12
[2,]   10   11   12    9   11    2   10   12   12    10

然后通过在开头和结尾添加列来扩展此矩阵:

my_matrix2 <- cbind(my_matrix[, 9:10], my_matrix, my_matrix[, 1:2])
my_matrix2
     col9 col10 col1 col2 col3 col4 col5 col6 col7 col8 col9 col10 col1 col2
[1,]   11    12    8    7   14   11   14    8    8    7   11    12    8    7
[2,]   12    10   10   11   12    9   11    2   10   12   12    10   10   11

最后,您可以使用包中rollapply函数zoo来计算运行均值。请注意,您必须先安装zoo软件包。

my_matrix_smooth <- t(apply(my_matrix2, 1, function(z) zoo::rollapply(z, width = 5, FUN = mean)))

     col1 col2 col3 col4 col5 col6 col7 col8 col9 col10
[1,] 10.4 10.4 10.8 10.8 11.0  9.6  9.6  9.2  9.2     9
[2,] 11.0 10.4 10.6  9.0  8.8  8.8  9.4  9.2 10.8    11

为了检查这是否正确,我们可以(例如)查看col10第一行。平滑版本应为(7+11+12+8+7) / 5 = 9的确如此。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在WinForm应用程序中创建平滑的圆角

来自分类Dev

如何在C#Windows窗体应用程序中创建平滑的形状动画运动?

来自分类Dev

在R中应用函数以比较列

来自分类Dev

在R中创建函数以应用于多个数据集

来自分类Dev

使用函数作为函数参数以在with语句中使用

来自分类Dev

在R中的矩阵上应用Apply函数

来自分类Dev

如何在R中创建函数以创建列的子集?

来自分类Dev

如何为菜单创建平滑的动画?

来自分类Dev

使用UIImageView动画创建平滑的动画

来自分类Dev

如何在Powershell中编写函数以创建函数

来自分类Dev

如何在Powershell中编写函数以创建函数

来自分类Dev

聚合函数以在R中创建频率矩阵

来自分类Dev

如何在R中创建可在函数和sql语句中使用的全局变量?

来自分类Dev

在R中使用if / else语句在数据框中应用函数

来自分类Dev

在R中使用if / else语句在数据框中应用函数

来自分类Dev

使用“ AS”语句在SQL Server中创建函数

来自分类Dev

如何从异步函数创建同步函数以实现向后兼容

来自分类Dev

应用函数以获取Matlab中的多个状态

来自分类Dev

在3D R中创建平滑线

来自分类Dev

在多列上应用函数以创建多个新列

来自分类Dev

在列上应用函数以创建另一列

来自分类Dev

在purrrs映射函数中添加ifelse语句并应用一些tidyverse函数

来自分类Dev

R将向量应用于向量函数以用于矩阵到矩阵

来自分类Dev

R将向量应用于向量函数以用于矩阵到矩阵

来自分类Dev

使用 url 应用 if 语句

来自分类Dev

Numpy - 对矩阵中的所有行组合应用自定义函数以获得新矩阵?

来自分类Dev

如何在Qt中的弹出窗口小部件上创建平滑的圆角

来自分类Dev

如何在Qt中的弹出窗口小部件上创建平滑的圆角

来自分类Dev

如何在此DataFrame上应用函数以将Date更改为所需格式,并避免使用“ 0”和“-”

Related 相关文章

  1. 1

    在WinForm应用程序中创建平滑的圆角

  2. 2

    如何在C#Windows窗体应用程序中创建平滑的形状动画运动?

  3. 3

    在R中应用函数以比较列

  4. 4

    在R中创建函数以应用于多个数据集

  5. 5

    使用函数作为函数参数以在with语句中使用

  6. 6

    在R中的矩阵上应用Apply函数

  7. 7

    如何在R中创建函数以创建列的子集?

  8. 8

    如何为菜单创建平滑的动画?

  9. 9

    使用UIImageView动画创建平滑的动画

  10. 10

    如何在Powershell中编写函数以创建函数

  11. 11

    如何在Powershell中编写函数以创建函数

  12. 12

    聚合函数以在R中创建频率矩阵

  13. 13

    如何在R中创建可在函数和sql语句中使用的全局变量?

  14. 14

    在R中使用if / else语句在数据框中应用函数

  15. 15

    在R中使用if / else语句在数据框中应用函数

  16. 16

    使用“ AS”语句在SQL Server中创建函数

  17. 17

    如何从异步函数创建同步函数以实现向后兼容

  18. 18

    应用函数以获取Matlab中的多个状态

  19. 19

    在3D R中创建平滑线

  20. 20

    在多列上应用函数以创建多个新列

  21. 21

    在列上应用函数以创建另一列

  22. 22

    在purrrs映射函数中添加ifelse语句并应用一些tidyverse函数

  23. 23

    R将向量应用于向量函数以用于矩阵到矩阵

  24. 24

    R将向量应用于向量函数以用于矩阵到矩阵

  25. 25

    使用 url 应用 if 语句

  26. 26

    Numpy - 对矩阵中的所有行组合应用自定义函数以获得新矩阵?

  27. 27

    如何在Qt中的弹出窗口小部件上创建平滑的圆角

  28. 28

    如何在Qt中的弹出窗口小部件上创建平滑的圆角

  29. 29

    如何在此DataFrame上应用函数以将Date更改为所需格式,并避免使用“ 0”和“-”

热门标签

归档