dplyr: 열을 알파벳순으로 R 순서 지정
다른 col_name을 가진 큰 DF(수백 개 및 수백 개) 열이 알파벳 순서로 랜덤하게 분포되어 있는 경우:
df.x <- data.frame(2:11, 1:10, rnorm(10))
colnames(df.x) <- c("ID", "string", "delta")
col_name으로 모든 데이터(세로)를 알파벳 순으로 주문하려면 어떻게 해야 합니까?
기본적으로, 저는 CSV(sep="|") 텍스트 파일 수백 개를 가지고 있는데, 그 열을 하나의 df로 읽고 알파벳 순서로 정렬한 다음 다른 dplyf 함수를 사용하여 최종 결과를 얻습니다.열을 알파벳순으로 정렬하는 방법을 제외하고는 다 알아냈어요.열(위와 아래)을 알파벳 순으로 정렬하는 것이 아니라 col_names의 실제 수직 방향과 해당 데이터를 정렬하고 싶습니다.Excel에서 전체 데이터 열을 잘라 붙여넣는 것과 유사합니다.
예를 들어, 이 접근 방식을 검토했지만 이는 행을 알파벳 순으로 "분류"하는 것이며, 이는 제가 원하는 것이 아닙니다.
감사합니다!
이거 먹어봐요.
df %>% select(noquote(order(colnames(df))))
아니면 그냥
df[,order(colnames(df))]
2021년 12월 업데이트
새 버전dplyr
(>= 1.0.7).noquote
:
df %>% select(order(colnames(df)))
이 작업을 수행할 수 있는 다른 방법입니다.dplyr
사용하는 것입니다tidyselect::peek_vars
iris %>%
select(sort(tidyselect::peek_vars()))
current_vars()
정렬 가능하도록 열 이름을 반환합니다.select()
열 이름의 벡터를 사용합니다.
특정 열(또는 열)이 첫 번째 열(또는 마지막 열)이어야 하지만 나머지 열의 순서가 정해지면 다음을 수행할 수 있습니다.
mtcars %>% tibble %>%
select("hp", sort(colnames(.)))
최근 정리정돈을 사용한 부분 정렬(더 구체적으로,tidyselect
패키지), 사용peek_vars()
:
library(dplyr)
starwars
#> # A tibble: 87 x 14
#> name height mass hair_color skin_color eye_color birth_year
#> <chr> <int> <dbl> <chr> <chr> <chr> <dbl>
#> 1 Luke Skywalker 172 77 blond fair blue 19.0
#> 2 C-3PO 167 75 NA gold yellow 112.0
#> 3 R2-D2 96 32 NA white, blue red 33.0
#> 4 Darth Vader 202 136 none white yellow 41.9
#> 5 Leia Organa 150 49 brown light brown 19.0
#> 6 Owen Lars 178 120 brown, grey light blue 52.0
#> 7 Beru Whitesun lars 165 75 brown light blue 47.0
#> 8 R5-D4 97 32 NA white, red red NA
#> 9 Biggs Darklighter 183 84 black light brown 24.0
#> 10 Obi-Wan Kenobi 182 77 auburn, white fair blue-gray 57.0
#> # ... with 77 more rows, and 7 more variables: sex <chr>, gender <chr>,
#> # homeworld <chr>, species <chr>, films <list>, vehicles <list>, starships <list>
starwars %>% select(name, mass, sort(tidyselect::peek_vars()))
#> # A tibble: 87 x 14
#> name mass birth_year eye_color films gender hair_color height
#> <chr> <dbl> <dbl> <chr> <lis> <chr> <chr> <int>
#> 1 Luke Skywalker 77 19.0 blue <chr> masculine blond 172
#> 2 C-3PO 75 112.0 yellow <chr> masculine NA 167
#> 3 R2-D2 32 33.0 red <chr> masculine NA 96
#> 4 Darth Vader 136 41.9 yellow <chr> masculine none 202
#> 5 Leia Organa 49 19.0 brown <chr> feminine brown 150
#> 6 Owen Lars 120 52.0 blue <chr> masculine brown, grey 178
#> 7 Beru Whitesun lars 75 47.0 blue <chr> feminine brown 165
#> 8 R5-D4 32 NA red <chr> masculine NA 97
#> 9 Biggs Darklighter 84 24.0 brown <chr> masculine black 183
#> 10 Obi-Wan Kenobi 77 57.0 blue-gray <chr> masculine auburn, white 182
#> # ... with 77 more rows, and 6 more variables: homeworld <chr>, sex <chr>,
#> # skin_color <chr>, species <chr>, starships <list>, vehicles <list>
옵션이 있는 경우starts_with()
:
library(dplyr)
df.x |>
select(starts_with(LETTERS))
사용.dplyr
:
df.x %>%
select(sort(names(.)))
아직 답이 없기 때문에.relocate()
:
df |>
dplyr::relocate(sort(names(df)))
https://dplyr.tidyverse.org/reference/relocate.html
다음을 정의할 수 있습니다.
abc <- function(..., desc = FALSE) {
data <- tidyselect::peek_data()
named_selection <- tidyselect::eval_select(rlang::expr(c(...)), data)
named_selection[order(names(named_selection), named_selection, decreasing = desc)]
}
다른 솔루션과 달리 깔끔한 선택이 가능하지만, 당사의 경우에는 다음과 같은 것만 가능합니다.
df %>% select(abc(everything()))
왜 그냥 안 되나요?
sort(colnames(df.x))
[1] "delta" "ID" "string"
언급URL : https://stackoverflow.com/questions/29873293/dplyr-order-columns-alphabetically-in-r
'itsource' 카테고리의 다른 글
Swift 함수의 비동기 호출에서 데이터 반환 (0) | 2023.10.09 |
---|---|
DateTime::createFromFormat을 통해 '2016.04.30 PM 7:30'의 PHP DateTime 인스턴스를 만드는 데 적합한 형식은 무엇입니까? (0) | 2023.10.04 |
API에서 아이폰 IDFA를 검색하는 방법은? (0) | 2023.10.04 |
C++에서 파일을 디프하는 방법이 있습니까? (0) | 2023.10.04 |
소나타 관리 양식 내에서 Ajax를 사용하는 방법은? (0) | 2023.10.04 |