выбор и сортировка «имен числовых столбцов», созданных действием pivot_wider

#r #dplyr

Вопрос:

У меня есть таблица данных, созданная pivot_wider. «Имена» — это числа, которые теперь являются заголовками столбцов в новой таблице. Хотел бы выбрать последний столбец и упорядочить() по убыванию. Имена столбцов (в данном случае годы) могут изменяться по количеству и названию в зависимости от размера таблицы, в которой выполняется pivoted_wider. Я попытался использовать get() и paste0() для создания имени столбца из значения max() года, но получил сообщение об ошибке, в котором говорится, что столбец не существует.

Код, который я пробовал:

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

Вот результат pivot_wider, который я хотел бы отсортировать по столбцу с последним годом (в данном случае 2010).:

Размер: 912 х 7

Имя 2005 2006 2007 2008 2009 2010
1 Сьерра Венчурс 5 4 2 2 2 2
2 Фонд Мэйфилда 4 NA 1 NA NA 4
3 Целенаправленных Предприятия 4 1 2 1 2 NA

Ответ №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
 

Комментарии:

1. Я попробовал, но получил пару ошибок. Там было написано !!! был осужден к !! Только… поэтому я попробовал это и получил следующее: > tmp ><- pivot_wider(tmp, names_from = YR, values_from = Num_Deals) %>% упорядочить(!!символ(как.символ(макс(имена(.)[grepl(«\d «, имена (.))])))) Примечание. Использование внешнего вектора в выборках неоднозначно. я использую all_of(YR) вместо YR того, чтобы заставить замолчать это сообщение. я Вижу < tidyselect.r-lib.org/reference/faq-external-vector.html >. Ошибка: Не удается подмножество столбцов, которые не существуют. x Местоположение 2021 не существует. i Всего 7 столбцов.

2. И… хотелось бы отсортировать по столбцу с самым последним годом. 2010 в этом случае.

3. Я исправил это следующим образом: изменение as.characer на as.String, казалось, заставило все это работать .. также добавлен «desc», чтобы получить порядок убывания столбца max YR. tmp <- pivot_wider(tmp, имена из = года, значения из = Num_Deals) %>% упорядочить(desc(!!сим(как.Строка(макс(имена(.)[grepl(«\d «, имена(.))])))))