有必要創建一個隨機字母串列。然后按字母順序排序。要創建這樣的串列,我使用以下代碼:
# Creating a random vector of letters
random_text_data = sample(letters, 10)
random_text_data
# Convert to list
list_text_data = as.list(random_text_data)
list_text_data
在控制臺中,我得到以下資訊:
> random_text_data
[1] "h" "m" "q" "b" "z" "i" "y" "f" "d" "e"
> # Convert to list
> list_text_data = as.list(random_text_data)
> list_text_data
[[1]]
[1] "h"
[[2]]
[1] "m"
[[3]]
[1] "q"
[[4]]
[1] "b"
[[5]]
[1] "z"
[[6]]
[1] "i"
[[7]]
[1] "y"
[[8]]
[1] "f"
[[9]]
[1] "d"
[[10]]
[1] "e"
現在我需要按字母順序對其進行排序。我嘗試了以下方法:
# Sort list alphabetically
sort_data = sort(list_text_data)
但得到錯誤:
> sort_data = sort(list_text_data)
Error in sort.int(x, na.last = na.last, decreasing = decreasing, ...) :
'x' must be elementary
你應該如何排序?
uj5u.com熱心網友回復:
這是一個不需要的方法unlist()。用隨機字母制作串列后,用串列的內容為串列分配名稱。然后對串列中的名稱進行排序。
輸入
random_text_data = sample(letters, 10)
[1] "c" "v" "m" "g" "h" "l" "d" "i" "u" "y"
原始解決方案
list_text_data = as.list(random_text_data)
list_text_data <- setNames(list_text_data, list_text_data)
list_text_data[order(names(list_text_data))]
$c
[1] "c"
$d
[1] "d"
$g
[1] "g"
$h
[1] "h"
$i
[1] "i"
$l
[1] "l"
$m
[1] "m"
$u
[1] "u"
$v
[1] "v"
$y
[1] "y"
更新的解決方案
受@zx8754 的回答啟發,您實際上不需要更改串列的名稱,您可以使用setNameswithin order,然后輸出將是一個未命名的串列。
list_text_data[order(names(setNames(list_text_data, list_text_data)))]
[[1]]
[1] "c"
[[2]]
[1] "d"
[[3]]
[1] "g"
[[4]]
[1] "h"
[[5]]
[1] "i"
[[6]]
[1] "l"
[[7]]
[1] "m"
[[8]]
[1] "u"
[[9]]
[1] "v"
[[10]]
[1] "y"
uj5u.com熱心網友回復:
將字符轉換為整數,然后排序:
# reproducible example data
set.seed(1); random_text_data = sample(letters, 3)
list_text_data = as.list(random_text_data)
# [[1]]
# [1] "y"
#
# [[2]]
# [1] "d"
#
# [[3]]
# [1] "g"
# sort
list_text_data[ order(sapply(list_text_data, utf8ToInt)) ]
# [[1]]
# [1] "d"
#
# [[2]]
# [1] "g"
#
# [[3]]
# [1] "y"
uj5u.com熱心網友回復:
在對元素進行排序之前,我們可能必須先展平串列。我們可以試試下面的sort unlist
relist(sort(unlist(list_text_data)), list_text_data)
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/425641.html
下一篇:從R中的小標題中洗掉空串列
