我想读出矩阵中每个(唯一)值的列数字,并将该值添加到新表中,原始单元格值作为新矩阵中的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)Ps。:我知道将人们作为列而不是行作为行是不常见的 - 我正在使用的方法(q-methodology)。
答案 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循环中包装它(对于人们和治疗条件......)