【问题标题】:count the number of values greater than each value in a column of an array in r计算 r 中数组的列中大于每个值的值的数量
【发布时间】:2014-10-21 16:44:56
【问题描述】:

假设我有一个数组,其中 x 代表重复测量 (1-4),y 代表治疗 (A,B),z 代表时间点 (1-3)

x <- c(2,2,4,15,17,13,3,10,3,4,11,14,1,3,19,6,13,6,12,18,9,13,12,16)
dim(x) <- c(4,2,3)

, , 1

     [,1] [,2]
[1,]    2   17
[2,]    2   13
[3,]    4    3
[4,]   15   10

, , 2

     [,1] [,2]
[1,]    3    1
[2,]    4    3
[3,]   11   19
[4,]   14    6

, , 3

     [,1] [,2]
[1,]   13    9
[2,]    6   13
[3,]   12   12
[4,]   18   16

我想创建一个新数组,该数组的每个重复次数大于该处理和时间点组合的所有其他重复次数:

, , 1

     [,1] [,2]
[1,]    2    0 #both 4 and 15 are bigger then 2, so for 1,1,1 the result is 2
[2,]    2    1
[3,]    1    3 #15 is the only replicate bigger than 4 so result for 3,1,1 is 1
[4,]    0    2

, , 2

     [,1] [,2]
[1,]    3    3
[2,]    2    2
[3,]    1    0
[4,]    0    1

, , 3

     [,1] [,2]
[1,]    1    3 
[2,]    3    1 
[3,]    2    2 
[4,]    0    0 

【问题讨论】:

  • 我们可以得到使用的代码来生成原始数组吗?
  • 你没有倒数(或倒退的问题)吗?例如对于 c(2,2,4,15) 2 大于 0 的其他复制。数组向量 [1,1,1] == c(0,0,2,3) 不应该是 c(2,2,1,0) 吗?还是我看错了?
  • 为了简单起见,我只是组成了这个数组。我要应用它的数据有 2 个因子,每个因子有 50 个水平和 10,000 个重复 [1:10000, 1:50, 1:50]。对于因子水平的每个组合,我分别进行第一个复制,看看有多少其他复制更大,然后是第二个复制,看看有多少其他复制更大,依此类推,直到我有一个数组,其中的数量为对于每个原始仿行而言更大的其他仿行(分别针对因子水平的每种组合)

标签: arrays r


【解决方案1】:

给你...如果你的问题措辞不正确(正如我在上面怀疑的那样),那么你需要使用“”。

a <- array(rnorm(24), dim= c(4,2,3))

cnts <- function(a) {
  a2 <- array(NA, dim= dim(a))
  for (i in 1:dim(a)[3]) {
    for (j in 1:dim(a)[2]) {
      for (k in 1:length(a[,j,i])) {
        a2[k,j,i] <- sum(a[k,j,i] > a[,j,i])
      }
    }
  }
  return(a2)
}

【讨论】:

    【解决方案2】:

    apply 可以做到这一点,在每列 (2) 和层 (3) 中起作用:

    ## recreate your data array:
    arr <- c(2,2,4,15,17,13,3,10,3,4,11,14,1,3,19,6,13,6,12,18,9,13,12,16)
    dim(arr) <- c(4,2,3)
    
    ## one liner using apply
    apply(arr, 2:3, function(x) sapply(x, function(y) sum(y < x) ) )
    
    #, , 1
    #
    #     [,1] [,2]
    #[1,]    2    0
    #[2,]    2    1
    #[3,]    1    3
    #[4,]    0    2
    #
    #, , 2
    # 
    #     [,1] [,2]
    #[1,]    3    3
    #[2,]    2    2
    #[3,]    1    0
    #[4,]    0    1
    # 
    #, , 3
    # 
    #     [,1] [,2]
    #[1,]    1    3
    #[2,]    3    1
    #[3,]    2    2
    #[4,]    0    0
    

    【讨论】:

      猜你喜欢
      • 2021-05-13
      • 2021-12-05
      • 2021-12-25
      • 1970-01-01
      • 2020-06-04
      • 2020-05-22
      • 1970-01-01
      • 2021-10-24
      • 1970-01-01
      相关资源
      最近更新 更多