2014-11-05 174 views
1

我想读出矩阵中每个(唯一)值的列的数字,并将该值添加到原始单元格值为新矩阵中的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 s在fruit_ranking_person1
  • 水果fruit_ranking_person1在每个person矩阵内都是唯一的;没有重复提到(我测试数据录入)在fruit_ranking_person1
  • 垂直维度(不同行)是没有意义的 - 不过,数据需要在进入这种形式(这是一个q-sort,如果任何人的兴趣)
  • 我知道我仍然必须通过person1-n循环(或其他),但这是一个不同的问题。

ps .:我知道,不同于人们作为列,而不是行 - 我使用的方法(q-methodology)要求它。

+0

虽然我在这里,但我也无法使StackExchange格式化工作为第一张桌子。该死。 – maxheld 2014-11-06 15:57:15

回答

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循环的层次中(对于人员和处理条件...)