#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 «, имена(.))])))))