我有以下內容vector <-c ("1.2", "1.11", "5.3", "5.5"),我想完成它,以便輸出
1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 1.8, 1.9, 1.10, 1.11, 5.1, 5.2, 5.3, 5.4, 5.5
你看,1.11高于,例如,1.5因為它是第 11 個element of 1.
它基本上是按浮點數前的數字分組排序,然后按浮點數后的數字加上值進行排序。總是以一個開頭.1
我嘗試使用seq,但當然它不起作用,因為數字1.3會大于1.11.
uj5u.com熱心網友回復:
一個data.table選項:
library(data.table)
as.data.table(tstrsplit(x, "\\."))[, .(V2 = seq_len(max(as.integer(V2)))), by = V1
][, paste(V1, V2, sep = ".")]
# [1] "1.1" "1.2" "1.3" "1.4" "1.5" "1.6" "1.7" "1.8" "1.9" "1.10" "1.11" "5.1" "5.2" "5.3" "5.4" "5.5"
使用管道:
tstrsplit(x, "\\.") |>
as.data.table() |>
DT(, .(V2 = seq_len(max(as.integer(V2)))), by = V1) |>
DT(, paste(V1, V2, sep = "."))
uj5u.com熱心網友回復:
一個基本的 R 解決方案(如果你想要一個向量,只需使用unlist)
mapply(
function(x,y){
paste0(
as.numeric(strsplit(x,"\\.")[[1]][1]),
".",
seq(1,as.numeric(strsplit(y,"\\.")[[1]][2]),1)
)
},
vector[seq(1,length(tmp),2)],
vector[seq(2,length(tmp),2)]
)
$`1.2`
[1] "1.1" "1.2" "1.3" "1.4" "1.5" "1.6" "1.7" "1.8" "1.9" "1.10" "1.11"
$`5.3`
[1] "5.1" "5.2" "5.3" "5.4" "5.5"
uj5u.com熱心網友回復:
這可能是您可以使用的一個基本 R 代碼(我使用v而不是vector為了避免與內置函式發生沖突vector)
do.call(
paste,
c(rev(
stack(
lapply(
split(
gsub(".*\\.", "", v),
gsub("\\..*", "", v)
),
function(x) {
seq(max(as.integer(x)))
}
)
)
),
sep = "."
)
)
這使
[1] "1.1" "1.2" "1.3" "1.4" "1.5" "1.6" "1.7" "1.8" "1.9" "1.10"
[11] "1.11" "5.1" "5.2" "5.3" "5.4" "5.5"
uj5u.com熱心網友回復:
一個選項,paste? sequences的by。
do.call(rbind.data.frame, strsplit(vector, '\\.')) |>
(\(s) by(s, s[, 1], \(z) {
Reduce(\(x, y) paste(y, x, sep='.'), z[1], seq(max(as.numeric(z[, 2]))))
}))() |>
unlist() |> unname()
# [1] "1.1" "1.2" "1.3" "1.4" "1.5" "1.6" "1.7" "1.8" "1.9" "1.10" "1.11"
# [12] "5.1" "5.2" "5.3" "5.4" "5.5"
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/380660.html
標籤:r
