【问题标题】:selecting and sorting "numeric columns names", created by a pivot_wider action选择和排序由 pivot_wider 操作创建的“数字列名称”
【发布时间】:2021-10-19 13:50:08
【问题描述】:

我有一个由 pivot_wider 创建的数据表。 “names_from”是数字,现在是新表中的列标题。想选择最后一列并排列()降序。列名(在这种情况下为年份)可能会根据被透视的表的大小而在数量和名称上发生变化。我尝试使用 get() 和 paste0() 从年份的 max() 值创建列名,但收到错误提示该列不存在。

我试过的代码:

        tmp <- pivot_wider(tmp, names_from = YR, values_from = Num_Deals) %>% 
            arrange(ends_with(paste0(max(YRS)))) 
        tmp

这是我想按最近年份(在本例中为 2010 年)的列排序的 pivot_wider 结果:

小标题:912 x 7

name 2005 2006 2007 2008 2009 2010
1 Sierra Ventures 5 4 2 2 2 2
2 Mayfield Fund 4 NA 1 NA NA 4
3 Focus Ventures 4 1 2 1 2 NA

【问题讨论】:

    标签: r dplyr


    【解决方案1】:

    很可能有更简单的解决方案,但您可以使用:

    library(dplyr)
    
    tmp %>% 
      arrange(desc(!!sym(as.character(max(as.integer(names(.)[grepl("\\d+", names(.))]))))))
    
    

    返回

    # A tibble: 3 x 7
      name            `2005` `2006` `2007` `2008` `2009` `2010`
      <chr>            <dbl>  <dbl>  <dbl>  <dbl>  <dbl>  <dbl>
    1 Mayfield_Fund        4     NA      1     NA     NA      4
    2 Sierra_Ventures      5      4      2      2      2      2
    3 Focus_Ventures       4      1      2      1      2     NA
    

    【讨论】:

    • 我试过了,但有几个错误。它说的!已弃用!只有...所以我尝试了一下,得到了以下结果:> tmp % + 安排(!!sym(as.character(max(names(.)[ grepl("\\d+", names(.))])))) 注意:在选择中使用外部向量是不明确的。 i 使用 all_of(YR) 而不是 YR 来关闭此消息。我见 tidyselect.r-lib.org/reference/faq-external-vector.html>。错误:不能对不存在的列进行子集化。 x 位置 2021 不存在。 i 只有 7 列。
    • And ... 想按最近一年的列排序。 2010 在这种情况下。
    • 我将其修复如下:将 as.characer 更改为 as.String 似乎使其一切正常.. 还添加了“desc”以获得最大 YR 列的降序。 tmp % 排列(desc(!!sym(as.String(max(names(.)[grepl("\\d+", names(.))) ])))))
    猜你喜欢
    • 2020-08-27
    • 1970-01-01
    • 1970-01-01
    • 2016-05-23
    • 1970-01-01
    • 2013-06-03
    • 2013-12-02
    • 2018-04-11
    • 2020-06-09
    相关资源
    最近更新 更多