【问题标题】:Sort a dataframe based on a specific column in R with dplyr使用 dplyr 根据 R 中的特定列对数据框进行排序
【发布时间】:2021-12-19 22:28:17
【问题描述】:

我有一个看起来像这样的数据框

df <- data.frame(time=seq(1,4,1),col1=c("a","b","d","c"), col2=c("d","a","c","b"))
df
#>   time col1 col2
#> 1    1    a    d
#> 2    2    b    a
#> 3    3    d    c
#> 4    4    c    b

reprex package (v2.0.1) 于 2021-11-06 创建

我想根据 col2 对我的数据框进行排序,看起来像这样

  time col1 col2 
    3    d    d
    1    a    a
    4    c    c
    2    b    b

非常感谢任何想法或帮助!

【问题讨论】:

  • 请解释您的意思,因为没有明显的orderrank 或其他明确的方式将c(3,1,4,2)col2c("d","a","c","b") 联系起来。例如,col2col1 之间似乎存在因果关系,但这不应该是推断的。
  • 这是一个非常好的观点 r2evans。数据背后没有真正的理由。我睡前主要是在做实验,我想知道这是否可以实现。如果这听起来像个毛病,请原谅。我很高兴回答在您的评论中添加更多内容

标签: r dplyr tidyverse tidyr


【解决方案1】:

不知道这是否有意义,但您可以进行自我加入:

library(tidyr)
library(dplyr)

df %>% 
  select(col2) %>% 
  inner_join(df %>% mutate(col2 = col1), by = "col2") %>% 
  select(time, col1, col2)

返回

  time col1 col2
1    3    d    d
2    1    a    a
3    4    c    c
4    2    b    b

【讨论】:

    【解决方案2】:

    基础 R 中的解决方案:

    df <- data.frame(time = match(df$col2,df$col1),  col1 = df$col2, col2=df$col2)
    
    #>   time col1 col2
    #> 1    3    d    d
    #> 2    1    a    a
    #> 3    4    c    c
    #> 4    2    b    b
    

    【讨论】:

    • 谢谢你,保罗。它看起来真的很整洁!
    猜你喜欢
    • 1970-01-01
    • 2020-06-18
    • 1970-01-01
    • 2022-12-18
    • 1970-01-01
    • 1970-01-01
    • 2018-10-17
    • 2020-08-04
    • 1970-01-01
    相关资源
    最近更新 更多