Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
按以R结尾的数字对列进行排序_R_Sorting_Dplyr - Fatal编程技术网

按以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