R 如何根据列对每个项目进行排名?

R 如何根据列对每个项目进行排名?,r,dataframe,dplyr,tidyr,R,Dataframe,Dplyr,Tidyr,我想根据以下示例中的列对每个项目进行排名 对于每个项目,所有元素都存在于LC1中,应排在第一位,在LC2中应排在第二位,在LC3中应排在第三位,在LC4中应排在第四位 输入: Item LC1 LC2 LC3 LC4 1 0A2926 MW92 RM11 RS11 WK14 2 0A2926 MW92 RM11 RS11 WK15 3 0A2926 MW92 SE92 NA NA 4

我想根据以下示例中的列对每个项目进行排名

对于每个项目,所有元素都存在于LC1中,应排在第一位,在LC2中应排在第二位,在LC3中应排在第三位,在LC4中应排在第四位

输入:

     Item   LC1     LC2     LC3    LC4
1   0A2926  MW92    RM11    RS11    WK14
2   0A2926  MW92    RM11    RS11    WK15
3   0A2926  MW92    SE92    NA      NA
4   0A3721  RM11    MW92    NA      NA
5   0A4664  MW92    RM11    RS11    NA
输出:

 Item    LC     Rank 
0A2926   MW92     1
0A2926   RM11     2
0A2926   SE92     2
0A2926   RS11     3
0A2926   WK14     4
0A2926   WK15     4
0A3721   RM11     1
0A3721   MW92     2
0A4664   MW92     1
0A4664   RM11     2
0A4664   RS11     3

有人可以指导我如何在R中继续此操作吗?

一种方法可以是
收集
数据,以长格式删除
NA
值,并获取
Rank
删除列中的字符值,以便只保留数字

library(dplyr)
df %>%
  tidyr::gather(Rank, value, starts_with("LC"), na.rm = TRUE) %>%
  mutate(Rank = as.integer(gsub("[A-Z]", "", Rank)))


#     Item Rank value
#1  0A2926    1  MW92
#2  0A2926    1  MW92
#3  0A2926    1  MW92
#4  0A3721    1  RM11
#5  0A4664    1  MW92
#6  0A2926    2  RM11
#7  0A2926    2  RM11
#8  0A2926    2  SE92
#9  0A3721    2  MW92
#10 0A4664    2  RM11
#11 0A2926    3  RS11
#12 0A2926    3  RS11
#13 0A4664    3  RS11
#14 0A2926    4  WK14
#15 0A2926    4  WK15

您可以像这样使用
tidyverse
软件包:

library(tidyverse)

df %>% gather(Rank, LC, -Item) %>%
  mutate(Rank = as.numeric(grep("[0-9]", Rank, value = T))) %>%
  select(Item, LC, Rank)