按单元格内容,行索引合并表格

时间:2014-11-05 23:09:11

标签: r matrix match lookup which

我想读出矩阵中每个(唯一)值的数字,并将该值添加到新表中,原始单元格值作为新矩阵中的rownames。

这是最低工作示例(MWE):

众多(每人一个)矩阵中的一个fruit_ranking_person1

fruit_ranking_thomas <- matrix(
c(
    "NA", "Pear", "Banana", "Strawberry", "Peach", "Rasberry", "Grapefruit", "Orange", "NA", "Apple"
),
nrow = 2
)

print(fruit_ranking_thomas)
     [,1]   [,2]         [,3]       [,4]         [,5]   
[1,] "NA"   "Banana"     "Peach"    "Grapefruit" "NA"   
[2,] "Pear" "Strawberry" "Rasberry" "Orange"     "Apple"

这个原始矩阵给出了一个人给予这些水果的等级(从1到给出)。

应该变成这个矩阵fruit_ranking_aggregate(在这里难以输入以供说明):

Fruit,      Thomas,    Lisa
Apple,       5         ...
Pear,        1
Banana,      2
Strawberry,  2
Peach,       3
Rasberry     3
Grapefruit,  4
Orange,      4

我还有一个矩阵fruit_ranking_aggregate

fruit_ranking_aggregate <- matrix(
  , # empty for now
  nrow = 8, # let's say there are 7 fruit
  ncol = 3, # let's say there's going to be 3 people
  dimnames = list(
    c(
        "Apple", "Banana", "Grapefruit", "Orange", "Peach", "Pear", "Rasberry", "Strawberry"
    ),
    c("Thomas", "Lisa", "Peter")
  )
)

print(fruit_ranking_aggregate)
               Thomas Lisa Peter
Apple          NA   NA    NA
Banana         NA   NA    NA
Grapefruit     NA   NA    NA
Orange         NA   NA    NA
Peach          NA   NA    NA
Pear           NA   NA    NA
Rasberry       NA   NA    NA
Strawberry     NA   NA    NA

进一步注意:

  • 为简单起见,我使用fruit_ranking_person1中的colname作为排名;喜欢的水果在右边。
  • NA中有fruit_ranking_person1个。
  • fruit_ranking_person1中的水果在每个person矩阵中都是唯一的;没有重复的提及(我在数据录入时测试)
  • fruit_ranking_person1中的垂直维度(不同的行)毫无意义 - 数据在输入时采用此形式(如果有人感兴趣,则为q-sort
  • 我知道我仍然需要在person1-n上循环(或某事),但这是一个不同的问题。

Ps。:我知道将人们作为列而不是行作为行是不常见的 - 我正在使用的方法(q-methodology)。

1 个答案:

答案 0 :(得分:0)

我有一个可以解决这个问题的解决方案,但是我有一个预感 是一个更优雅/更聪明的方法来做到这一点......

for (n in rownames(fruit_ranking_aggregate)){
    fruit_ranking_aggregate[n,"Thomas"] <- which(fruit_ranking_thomas == n, arr.ind = TRUE, useNames = TRUE)[2]
}
print(fruit_ranking_aggregate)
           Thomas Lisa Peter
Apple           5   NA    NA
Banana          2   NA    NA
Grapefruit      4   NA    NA
Orange          4   NA    NA
Peach           3   NA    NA
Pear            1   NA    NA
Rasberry        3   NA    NA
Strawberry      2   NA    NA

完成! - 但感觉很麻烦。另外,我仍然需要在2层以上的for循环中包装它(对于人们和治疗条件......)