R 需要按字母顺序列出一份清单

R 需要按字母顺序列出一份清单,r,R,对R来说比较新,但我有一个名字列表,每个名字都在一个单独的列中,我想按字母顺序组合成一个列表 X <- c("ringo","paul","john","george") 手动标记顺序,然后尝试使用偏移量索引元素 x <- c("ringo","4","paul","3","john","2","george","1") Which(x == 1) 使用paste、list_concat或cbind,我基本上可以得到以下信息: x <- paste0(pbptop$a1.

对R来说比较新,但我有一个名字列表,每个名字都在一个单独的列中,我想按字母顺序组合成一个列表

X <- c("ringo","paul","john","george")
手动标记顺序,然后尝试使用偏移量索引元素

x <- c("ringo","4","paul","3","john","2","george","1")

Which(x == 1)
使用paste、list_concat或cbind,我基本上可以得到以下信息:

x <- paste0(pbptop$a1.num,pbptop$a2.num)
[1] pauljohn
[2] ringogeorge
现在应该是这样的:

a1.num  a2.num  concat
paul    john    pauljohn
ringo   george  ringogeorge

pbptop <- pbptop %>% arrange(concat)
我们应该做到这一点


或者,不使用pbptop$concat而是希望在a1.num和a2.num列中使用名称,concat基于这两个列中的哪一个先出现

为此:

library(dplyr)
pbptop_alphabetical <- pbptop %>%
                          mutate(concat = ifelse(a1.num < a2.num, paste(a1.num, a2.num), paste(a2.num, a1.num)))
这应该是可行的

解决方案: 这是一个更老的问题,但我今天亲自问过,来到这里发现它没有解决。以下是我为达成解决方案而采取的步骤,我想与大家分享:

1创建一个reprex示例: 由于我缺乏创造性,我的字符串将是随机的字母样本

set.seed(42) # the answer to the universe
n <- 50
string_a <- sample(letters, n, replace = TRUE)
string_b <- sample(letters, n, replace = TRUE)
string_c <- sample(letters, n, replace = TRUE)

firststring <- paste0(string_a, string_b, string_c)
secondstring <- paste0(string_b, string_c, string_a)
rm(list = ls()[grep("string_", ls())])

df <- tibble(
  firststring = firststring,
  secondstring = secondstring
)
head(df)
# A tibble: 6 x 2
# firststring secondstring
# <chr>       <chr>       
# 1 qcd         cdq         
# 2 exy         xye         
# 3 awd         wda         
# 4 yqg         qgy         
# 5 juj         ujj         
# 6 dzr         zrd
3输出: 正如您所看到的,变量保持其原始顺序,但是新的“字母顺序”列为我们提供了我们希望实现的元素顺序

# A tibble: 50 x 3
# Rowwise: 
   firststring secondstring alphabetical
   <chr>       <chr>        <chr>       
 1 qcd         cdq          cdq qcd     
 2 exy         xye          exy xye     
 3 awd         wda          awd wda     
 4 yqg         qgy          qgy yqg     
 5 juj         ujj          juj ujj     
 6 dzr         zrd          dzr zrd     
 7 rrm         rmr          rmr rrm     
 8 zfu         fuz          fuz zfu     
 9 qfv         fvq          fvq qfv     
10 obs         bso          bso obs     
# ... with 40 more rows

R区分大小写。您的列表名为X,排序函数名为sort,但您的示例代码显示为Sortunlistx,也就是说,它在X和sort上的大小写都错误。如果这些是列表的名称,那么X[ordernamesX]您可以使用gtools包。请浏览此链接:applydf如何,1,functionx pastesortx,collapse=。您仍然需要字符值,如果数据是factor,则apply将强制数据为字符。arrangepbptop_字母顺序的$concat片段是什么?pbptop%>%mutateCat=pastea1.num,a2.num%>%arrangeconcat应该按concat对df进行排序。运行之后,只需按字母顺序查看pBPTOP_,它应该是sortedApologies,无法确定如何正确显示代码。pbptop_字母顺序%+mutateCat=pastea1.num,a2.num%>%+arrangeconcat>>arrangepbptop_字母顺序$concat在UseMethodarrange中出错:没有适用于类字符对象的“arrange_”方法删除arrangepbptop_字母顺序$concat。arrangeconcat已经做到了。即使移除了最后一步,仍然得到了concat paul john ringo george。可能是用户错误,但目前为止运气不好。哦,我想我误解了你写的内容。你想按字母顺序排列吗?比如说,如果约翰在保罗之前,就把约翰放在连接中的第一位?这不是一种不同的方法。编辑此问题的其他答案,而不是输入新答案。
library(dplyr)

a1.num  a2.num
paul    john
ringo   george

pbptop$concat <- paste(pbptop$a1.num, pbptop$a2.num)
a1.num  a2.num  concat
paul    john    pauljohn
ringo   george  ringogeorge

pbptop <- pbptop %>% arrange(concat)
pbptop_alphabetical <- pbptop %>%
                          mutate(concat = paste(a1.num, a2.num)) %>%
                          arrange(concat)
library(dplyr)
pbptop_alphabetical <- pbptop %>%
                          mutate(concat = ifelse(a1.num < a2.num, paste(a1.num, a2.num), paste(a2.num, a1.num)))
set.seed(42) # the answer to the universe
n <- 50
string_a <- sample(letters, n, replace = TRUE)
string_b <- sample(letters, n, replace = TRUE)
string_c <- sample(letters, n, replace = TRUE)

firststring <- paste0(string_a, string_b, string_c)
secondstring <- paste0(string_b, string_c, string_a)
rm(list = ls()[grep("string_", ls())])

df <- tibble(
  firststring = firststring,
  secondstring = secondstring
)
head(df)
# A tibble: 6 x 2
# firststring secondstring
# <chr>       <chr>       
# 1 qcd         cdq         
# 2 exy         xye         
# 3 awd         wda         
# 4 yqg         qgy         
# 5 juj         ujj         
# 6 dzr         zrd
df %>%
  rowwise() %>% 
  mutate(alphabetical = paste(sort(unlist(strsplit(paste(firststring, secondstring, sep = " "), " "))), collapse = " "))
# A tibble: 50 x 3
# Rowwise: 
   firststring secondstring alphabetical
   <chr>       <chr>        <chr>       
 1 qcd         cdq          cdq qcd     
 2 exy         xye          exy xye     
 3 awd         wda          awd wda     
 4 yqg         qgy          qgy yqg     
 5 juj         ujj          juj ujj     
 6 dzr         zrd          dzr zrd     
 7 rrm         rmr          rmr rrm     
 8 zfu         fuz          fuz zfu     
 9 qfv         fvq          fvq qfv     
10 obs         bso          bso obs     
# ... with 40 more rows