R 需要按字母顺序列出一份清单
对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.
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