按以R结尾的数字对列进行排序
我有一个具有以下列名的数据框:按以R结尾的数字对列进行排序,r,sorting,dplyr,R,Sorting,Dplyr,我有一个具有以下列名的数据框: # A tibble: 1 x 5 name item2 item3 item1 item12 <lgl> <lgl> <lgl> <lgl> <lgl> 1 NA NA NA NA NA 但它不起作用 我的实际数据集有很多列,所以我不能只键入它;然而,这许多列中的每一列都以item开头。此外,数据集可能具有的列数是可变的,因此我不想使用特定的数字对其进行索引 谢谢大
# A tibble: 1 x 5
name item2 item3 item1 item12
<lgl> <lgl> <lgl> <lgl> <lgl>
1 NA NA NA NA NA
但它不起作用
我的实际数据集有很多列,所以我不能只键入它;然而,这许多列中的每一列都以item开头。此外,数据集可能具有的列数是可变的,因此我不想使用特定的数字对其进行索引
谢谢大家! 基本R解决方案:
problem[,c(grep("item",names(problem),value=TRUE,invert=TRUE), sort(grep("item",names(problem),value=TRUE)))]
这将为您提供一个df,该df以不包含“item”的所有列开始,然后是按字母顺序排序的“item”列。请注意,如果您有10个或更多案例,前9个案例是“item1”等,那么“item2”将出现在“item19”之后。基本解决方案:
problem[,c(grep("item",names(problem),value=TRUE,invert=TRUE), sort(grep("item",names(problem),value=TRUE)))]
这将为您提供一个df,该df以不包含“item”的所有列开始,然后是按字母顺序排序的“item”列。请注意,如果您有10个或更多事例,前9个事例是“item1”等,那么“item2”将位于“item19”之后。您可以使用gtools::mixedorder按数字分量对字符值进行排序
library(gtools)
df[order(grepl('item', names(df)), order(mixedorder(names(df))))]
# or
df[mixedorder(paste0(grepl('item', names(df)), names(df)))]
# name item1 item2 item3 item12
# 1 NA NA NA NA NA
或在基准R中(相同输出)
使用的数据:
df <- matrix(NA, 1, 5)
colnames(df) <- c('name', paste0('item', c(2, 3, 1, 12)))
df <- as.data.frame(df)
df您可以使用gtools::mixedorder按数字分量对字符值进行排序
library(gtools)
df[order(grepl('item', names(df)), order(mixedorder(names(df))))]
# or
df[mixedorder(paste0(grepl('item', names(df)), names(df)))]
# name item1 item2 item3 item12
# 1 NA NA NA NA NA
或在基准R中(相同输出)
使用的数据:
df <- matrix(NA, 1, 5)
colnames(df) <- c('name', paste0('item', c(2, 3, 1, 12)))
df <- as.data.frame(df)
df您可以使用regexpr
d <- cbind(d[1], d[-1][order(as.numeric(regmatches(names(d)[-1],
regexpr("\\d+", names(d)[-1]))))])
d
# name item1 item2 item3 item12
# 1 NA NA NA NA NA
d您可以使用regexpr
d <- cbind(d[1], d[-1][order(as.numeric(regmatches(names(d)[-1],
regexpr("\\d+", names(d)[-1]))))])
d
# name item1 item2 item3 item12
# 1 NA NA NA NA NA
d