Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 基于第二列顺序的列密集排序_R_Dplyr - Fatal编程技术网

R 基于第二列顺序的列密集排序

R 基于第二列顺序的列密集排序,r,dplyr,R,Dplyr,我正在绞尽脑汁做一些可能是直截了当的事情。我希望在数据帧中的一列上获得“密集”排名(如函数所定义),但不是基于列的正确顺序,顺序应该由另一列给出(val,在我的示例中) 我设法获得了密集的排名,如下所示: 库(dplyr) foo_df%arrange(val)%%>%mutate(id_fac=as.integer(factor(id))) #>id val id_fac #>1 4 a 3 #>2 1 b 1 #>3 1 c 1 #>43D2 #>5 3 e 2 但我希望根据val对系数级

我正在绞尽脑汁做一些可能是直截了当的事情。我希望在数据帧中的一列上获得“密集”排名(如函数所定义),但不是基于列的正确顺序,顺序应该由另一列给出(
val
,在我的示例中)

我设法获得了密集的排名,如下所示:

库(dplyr)
foo_df%arrange(val)%%>%mutate(id_fac=as.integer(factor(id)))
#>id val id_fac
#>1 4 a 3
#>2 1 b 1
#>3 1 c 1
#>43D2
#>5 3 e 2
但我希望根据
val
对系数级别进行排序。期望输出:

foo_所需的%arrange(val)%%>%mutate(id_fac=as.integer(factor(id,levels=c(4,1,3)))
福乌
#>id val id_fac
#>1 4 a 1
#>2 1 b 2
#>3 1 c 2
#>43D3
#>5 3 e 3
  • 我尝试了
    data.table::frank
  • 我通过@Prasad Chalasani尝试了这两种方法
  • 我尝试使用
    id[rank(val)]
    (和
    sort(val)
    ,以及
    order(val)
    )设置
    id的顺序
  • 最后,我还尝试使用
    rank(val)
    等对级别进行排序,但这会引发一个错误(
    评估错误:因子级别[3]重复。

  • 我知道可以指定级别顺序,我使用它来创建所需的输出。然而,这个解决方案并不好,因为我的数据有更多的行和级别

我需要它是为了方便,为了生成一个具有特定顺序的表,而不是为了计算


由(v0.2.1)于2018-12-19创建。

您可以先使用
进行检查

foo_df %>% arrange(val) %>% 
          group_by(id)%>%mutate(id_fac = first(val))%>%
          ungroup()%>%
          mutate(id_fac=as.integer(factor(id_fac)))
# A tibble: 5 x 3
     id    val id_fac
  <dbl> <fctr>  <int>
1     4      a      1
2     1      b      2
3     1      c      2
4     3      d      3
5     3      e      3
foo_df%%>%arrange(val)%%>%
分组依据(id)%>%突变(id fac=first(val))%>%
解组()%>%
变异(id_fac=as.integer(factor(id_fac)))
#一个tibble:5x3
id val id_fac
1 4 a 1
2 1 b 2
3 1 c 2
43D3
5 3 e 3

您可以先查看

foo_df %>% arrange(val) %>% 
          group_by(id)%>%mutate(id_fac = first(val))%>%
          ungroup()%>%
          mutate(id_fac=as.integer(factor(id_fac)))
# A tibble: 5 x 3
     id    val id_fac
  <dbl> <fctr>  <int>
1     4      a      1
2     1      b      2
3     1      c      2
4     3      d      3
5     3      e      3
foo_df%%>%arrange(val)%%>%
分组依据(id)%>%突变(id fac=first(val))%>%
解组()%>%
变异(id_fac=as.integer(factor(id_fac)))
#一个tibble:5x3
id val id_fac
1 4 a 1
2 1 b 2
3 1 c 2
43D3
5 3 e 3

为什么你甚至需要
因子?不确定我是否遗漏了什么,但这会提供您想要的输出

您可以使用
match
根据
id
s的出现来获取
id\u fac

library(dplyr)

foo_df %>%
    mutate(id_fac = match(id, unique(id)))

#  id val id_fac
#1  4   a      1
#2  1   b      2
#3  1   c      2
#4  3   d      3
#5  3   e      3

为什么您甚至需要
因子
?不确定我是否遗漏了什么,但这会提供您想要的输出

您可以使用
match
根据
id
s的出现来获取
id\u fac

library(dplyr)

foo_df %>%
    mutate(id_fac = match(id, unique(id)))

#  id val id_fac
#1  4   a      1
#2  1   b      2
#3  1   c      2
#4  3   d      3
#5  3   e      3

这是一个很好的方法。然而,我会接受@Ronak Shah更直接的回答。这是一个很好的方法。不过,我会接受@Ronak Shah更直接的回答。你完全正确,我不需要任何因素——这只是我获得如此密集排名的方法。非常好的解决方案。谢谢你是绝对正确的,我不需要因素-这只是我的方法得到这个密集的排名。非常好的解决方案。谢谢