R 如何选择部分匹配的列进行排序
我有一个数据帧R 如何选择部分匹配的列进行排序,r,R,我有一个数据帧df。我需要通过将\u case列放在一起、\u control列放在一起、MCI放在一起和unknown放在一起来对列重新排序。我可以通过使用grepl,然后按这个顺序cbind列来实现这一点,但是有没有一种有效的方法来实现这一点 df <- structure(list(Ethnicity = structure(1:4, .Label = c("AA", "Asian", "Hispanic", "
df
。我需要通过将\u case
列放在一起、\u control
列放在一起、MCI
放在一起和unknown
放在一起来对列重新排序。我可以通过使用grepl,然后按这个顺序cbind列来实现这一点,但是有没有一种有效的方法来实现这一点
df <- structure(list(Ethnicity = structure(1:4, .Label = c("AA", "Asian",
"Hispanic", "NHW"), class = "factor"), `<65_case` = c(29L, 13L,
63L, 1215L), `<65_control` = c(0L, 0L, 0L, 0L), `<65_MCI` = c(75L,
23L, 43L, 385L), `<65_unknown` = c(6L, 5L, 19L, 126L), `<70_case` = c(45L,
25L, 109L, 2321L), `<70_control` = c(0L, 0L, 0L, 1L), `<70_MCI` = c(124L,
36L, 76L, 633L), `<70_unknown` = c(14L, 6L, 23L, 166L), `<75_case` = c(73L,
47L, 167L, 3704L), `<75_control` = c(0L, 0L, 0L, 1L), `<75_MCI` = c(174L,
52L, 103L, 863L), `<75_unknown` = c(29L, 7L, 33L, 220L)), row.names = c(NA,
-4L), class = "data.frame")
df这是否有效:
> library(dplyr)
> df %>% select(ends_with('case'),ends_with('control'),ends_with('MCI'),ends_with('unknown'))
<65_case <70_case <75_case <65_control <70_control <75_control <65_MCI <70_MCI <75_MCI <65_unknown <70_unknown <75_unknown
1 29 45 73 0 0 0 75 124 174 6 14 29
2 13 25 47 0 0 0 23 36 52 5 6 7
3 63 109 167 0 0 0 43 76 103 19 23 33
4 1215 2321 3704 0 1 1 385 633 863 126 166 220
>
>库(dplyr)
>df%>%select(以('case')结束,以('control')结束,以('MCI')结束,以('unknown')结束)
像这样?nms在select
中的其他有价值的选项是以
开始和以
结束
> df[-1][order(gsub('(.*)_(.*)','\\2',colnames(df)[-1]))]
<65_case <70_case <75_case <65_control <70_control <75_control <65_MCI <70_MCI <75_MCI <65_unknown <70_unknown <75_unknown
1 29 45 73 0 0 0 75 124 174 6 14 29
2 13 25 47 0 0 0 23 36 52 5 6 7
3 63 109 167 0 0 0 43 76 103 19 23 33
4 1215 2321 3704 0 1 1 385 633 863 126 166 220
>
require(tidyverse)
df %>% select(contains("case"), contains("control"), contains("MCI"), contains("unknown"))