使用向量中的值填充排名 Dataframe [重复]

idfiyjo8  于 2023-02-10  发布在  其他
关注(0)|答案(1)|浏览(139)
    • 此问题在此处已有答案**:

Dictionary style replace multiple items(11个答案)
3天前关闭。
我得到了这个df与一些排名(1为最大的数字,2为第二个...):

Rank.Df = data.frame(A1 = c(1, NA, NA),
                     A2 = c(2, 1, NA),
                     A3 = c(2, 1 , 3)); Rank.Df

我得到了一个向量和相应的数字:

Values = c(50,40,30) #50 is the value for rank 1, 40 is for rank 2 and 30 is for rank 3

但我尝试用向量中的值替换排名 Dataframe ,我甚至可以这么做,但速度很慢:

# First I created another data frame to store the data
Df.results = data.frame(A1 = NA,
                        A2 = NA,
                        A3 = NA) 

# And then loop through all combinations between rows and columns    
for(i in 1:nrow(Rank.Df)) {
  for(k in 1:ncol(Rank.Df)) {
    Df.results[i,k] = Values[Rank.Df[i,k]] 
  }
}

我想有更聪明的方法来做这个手术,我只是不知道怎么做。

khbbv19g

khbbv19g1#

这里不需要循环,相反,你可以把数据框转换成矩阵,整个操作将被矢量化:

Df.results <- Rank.Df
Df.results[] <- Values[as.matrix(Rank.Df)]

Df.results
#   A1 A2 A3
# 1 50 40 40
# 2 NA 50 50
# 3 NA NA 30

相关问题