gpt4 book ai didi

r - 基于数据类型按顺序选择列的 R tidyverse 方法

转载 作者:行者123 更新时间:2023-12-04 02:59:07 25 4
gpt4 key购买 nike

 library(tidyverse)
#> Warning: package 'tidyverse' was built under R version 3.4.4
#> Warning: package 'forcats' was built under R version 3.4.4

example <- tibble(
num1 = sample(1:100, 10),
categ1 = as.factor(c(sample(letters, 10))),
num2 = sample(1:100, 10),
categ2 = as.factor(c(sample(letters, 10)))
)

head(example)
#> # A tibble: 6 x 4
#> num1 categ1 num2 categ2
#> <int> <fct> <int> <fct>
#> 1 4 c 5 l
#> 2 86 u 64 b
#> 3 38 z 18 r
#> 4 95 e 44 j
#> 5 77 w 35 u
#> 6 84 y 14 i

reprex package 创建于 2018-06-19 (v0.2.0).

上面的示例显示了一个包含整数和因子数据类型列的基本数据框。在这个小例子中,很容易使用dplyr 中的select(example, categ1, categ2, num1, num2) 来手动选择您希望列出现的顺序。

但假设您有许多混合了数据类型的列,并且您希望首先选择所有因素,然后再选择其他所有因素(或基于数据类型的任何特定顺序)?

手动输入每个列名或使用 select() 帮助程序(如 contains())对于无数列来说很快就会变得乏味。我更喜欢 tidyverse 解决方案,但也对如何在基础 R 中实现这一点感兴趣。

最佳答案

包含 3 个类的列的示例数据

library(tidyverse)
example <- tibble(
num1 = as.character(sample(1:100, 10)),
categ1 = as.factor(c(sample(letters, 10))),
num2 = sample(1:100, 10),
categ2 = as.factor(c(sample(letters, 10)))
)

假设您想按此顺序对列进行排序

my.order <- c('factor', 'integer', 'character')

即因子,然后是整数,然后是字符

你可以做到

example %>% 
select(sapply(., class) %>% .[order(match(., my.order))] %>% names)

# # A tibble: 10 x 4
# categ1 categ2 num2 num1
# <fct> <fct> <int> <chr>
# 1 y e 94 46
# 2 t b 52 31
# 3 w c 32 57
# 4 k i 27 89
# 5 n d 76 14
# 6 x g 67 40
# 7 c v 16 20
# 8 e z 6 95
# 9 i t 70 13
# 10 g w 57 42

作为函数(相同的输出)

order_cols <- function(df, col.order){
df %>%
select(sapply(., class) %>% .[order(match(., col.order))] %>% names)
}

example %>%
order_cols(c('factor', 'integer', 'character'))

关于r - 基于数据类型按顺序选择列的 R tidyverse 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50936138/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com