【问题标题】:Extracting array values based on values in different dimension根据不同维度的值提取数组值
【发布时间】:2016-06-23 09:58:59
【问题描述】:

我遇到了一个数组的子集值问题。

raw.table <- array(data = c(1:12,13:24,rep(1:6, each=2)), 
                   dim=c(3,4,3),
                   dimnames=list(LETTERS[1:3],1:4,c("target","ctrl","samples")))

我的数组的前两个维度表示我想要对其进行统计的一些值,更高的维度包含我想要用来访问特定子集的不同属性。在这种情况下,我只有样本编号,而总是有两个值分配给相同的样本编号(测量重复)。

, , target

  1 2 3  4
A 1 4 7 10
B 2 5 8 11
C 3 6 9 12

, , ctrl

   1  2  3  4
A 13 16 19 22
B 14 17 20 23
C 15 18 21 24

, , samples

  1 2 3 4
A 1 2 4 5
B 1 3 4 6
C 2 3 5 6

如何访问维度 1(= 目标)中与维度 3(= 样本)中表示的样本编号相同的值?我使用 unique()、duplicated() 和 match() 尝试了不同的方法,但没有得到结果。我只是无法理解数组的索引-.-

干杯, 祖上

【问题讨论】:

  • 您的预期输出是什么?也许which(raw.table[,,1]==raw.table[,,3])
  • 我想要的输出将是raw.table[,,1] 中的两个值的向量,它们对应于raw.table[,,3] 中的相同样本编号。所以我不想比较不同维度的值(见你的答案),而是在一维内部进行比较,并使用结果来索引不同维度的值。
  • 我明白这一点,但我猜你只有两个元素可以比较,即targetsamples,或者有什么我们不知道的。
  • raw.table[,,1][raw.table[,,3]==x] 返回样本编号 x 的两个值。如果样本数的上限值不大(d <- sapply( sort(unique(c(raw.table[,,3]))), function(x) raw.table[,,1][raw.table[,,3]==x])'返回你想要的。

标签: arrays r multidimensional-array indexing


【解决方案1】:

通过逻辑测试(跨维度)形成逻辑索引:

> raw.table[,,1] == raw.table[,,3]
      1     2     3     4
A  TRUE FALSE FALSE FALSE
B FALSE FALSE FALSE FALSE
C FALSE FALSE FALSE FALSE

并使用它从第一个维度中选择项目(因为它们的长度相等,所以没有回收):

> raw.table[, , 1 ][ raw.table[,,1] == raw.table[,,3] ]
[1] 1

对 Extract-operator 的链式调用在 R 中是完全可以接受的

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-12-02
    • 1970-01-01
    • 1970-01-01
    • 2021-09-24
    • 1970-01-01
    • 2018-03-07
    • 2017-02-12
    相关资源
    最近更新 更多