2017-02-04 76 views
0

相對較新的與R,但我有名稱(每一個單獨的列)的名單,我想結合成一個列表按字母順序排列需要以字母順序concatnate列表

X <- c("ringo","paul","john","george") 

預期的結果: ("george", "john","paul","ringo")

我已經嘗試了幾種不同的方法,包括:

Arrange(x) 
Sort(unlist(x)) 

,並手動標記的順序,然後試圖索引元素與偏移

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

Which(x == 1) 

但到目前爲止還沒有運氣。對於蹩腳的解釋道歉

後續:

實際設立這樣的數據幀pbptop的數據:使用粘貼,list_concat或cbind基本上

a1.num a2.num 
paul john 
ringo george 

給了我以下內容:

x <- paste0(pbptop$a1.num,pbptop$a2.num) 
[1] pauljohn 
[2] ringogeorge 

我想是每個列表或字符串

內按字母順序排列210
[1]johnpaul 
[2]georgeringo 

> require(gtools) 
> x <- paste0(pbptop$a1.num,pbptop$a2.num) 
> mixedsort(x) 

不幸的是,mixedsort只是按字母順序排列列表而不是每個列表,我無法獲得其他解決方案的工作。

paste(sort(pbptop$a1.num,pbptop$a2.num), collapse = ", ") 
Error in sort(pbptop$a1.num, pbptop$a2.num) : 
    'decreasing' must be a length-1 logical vector. 
Did you intend to set 'partial'? 
+0

R是區分大小寫的。你的列表被命名爲X,排序函數是'sort',但你的示例代碼是'Sort(unlist(x))',即它在X和sort上都有大小寫錯誤。 – G5W

+0

如果這些是'list'的名字,那麼'X [order(names(X))]' – akrun

+0

你可以使用'gtools'包。請通過這個鏈接:http://stackoverflow.com/questions/23160087/how-to-sort-alphabetically-in-r –

回答

-1
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 $ CONCAT < - 粘貼(...) 可以使用在dplyr發生變異管道下面的例子

在dplyr整個事情應該是這樣..

pbptop_alphabetical <- pbptop %>% 
          mutate(concat = paste(a1.num, a2.num)) %>% 
          arrange(concat) 
+0

什麼是安排(pbptop_alphabetical $ concat)片? (concat = paste(a1.num,a2.num))%>%arrange(concat)應該用concat排序你的df。運行後,只需查看(pbptop_alphabetical),它應該排序 –

+0

道歉,不能弄清楚如何讓代碼正確顯示。 'pbptop_alphabetical <- pbptop %>% +突變(CONCAT =膏(a1.num,a2.num))%>% +安排(CONCAT) > > >安排(pbptop_alphabetical $的concat)' 錯誤UseMethod( 「arrange_」): 對於「字符」類 –

+0

的對象應用的'arrange_'沒有適用的方法刪除排列(pbptop_alphabetical $ concat)。安排(concat)已經做到了。 –

-1

您希望在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))) 

應該工作

+0

這不是一個不同的方法。編輯你的這個問題的其他答案,而不是輸入一個新的問題。 –