我有一個整數向量,我想將其除以 3,然后我必須對拆分的部分進行排序并將 bac 放入整數向量中。
as.integer(c(16,9,2,17,10,3,18,11,4,19,12,5,20,13,6,21,14,7,22,15,8))
第一步 - 像這樣拆分:
16,9,2
17,10,3
18,11,4
19,12,5
20,13,6
21,14,7
22,15,8
第二步 - 訂購:
2,9,16
3,10,17
4,11,18
5,12,19
6,13,20
7,14,21
8,15,22
第三步 - 放回整數向量:
2,9,16,3,10,17,4,11,18,5,12,19,6,13,20,7,14,21,8,15,22
uj5u.com熱心網友回復:
帶matrix sort:
x <- as.integer(c(16,9,2,17,10,3,18,11,4,19,12,5,20,13,6,21,14,7,22,15,8))
c(apply(matrix(x, ncol = 3, byrow = T), 1, sort))
#[1] 2 9 16 3 10 17 4 11 18 5 12 19 6 13 20 7 14 21 8 15 22
或使用split gl:
unlist(lapply(split(x, gl(length(x) / 3, 3)), sort))
split使用 的另一種更短的方法rev(僅在rev并且sort相同時才有效):
c(do.call(rbind, rev(split(x, 1:3))))
#[1] 2 9 16 3 10 17 4 11 18 5 12 19 6 13 20 7 14 21 8 15 22
uj5u.com熱心網友回復:
這里不需要 {dplyr}。
x <- as.integer(c(16,9,2,17,10,3,18,11,4,19,12,5,20,13,6,21,14,7,22,15,8))
spl.x <- split(x, ceiling(seq_along(x)/3)) # split the vector
spl.x <- lapply(spl.x, sort) # sort each element of the list
Reduce(c, spl.x) # Reduce list to vector
第二行(拆分)來自這個答案:https ://stackoverflow.com/a/3321659/2433233
如果原始向量的長度不是 3 的倍數,這也有效。在這種情況下,最后一個串列元素更短。
uj5u.com熱心網友回復:
這是按順序執行步驟的一種方法:
vector=as.integer(c(16,9,2,17,10,3,18,11,4,19,12,5,20,13,6,21,14,7,22,15,8))
chunk <- 3
n <- length(vector)
r <- rep(1:ceiling(n/chunk),each=chunk)[1:n]
list_of3 <- split(vector,r)
# > list_of3
# $`1`
# [1] 16 9 2
#
# $`2`
# [1] 17 10 3
#
# $`3`
# [1] 18 11 4
#
# $`4`
# [1] 19 12 5
#
# $`5`
# [1] 20 13 6
#
# $`6`
# [1] 21 14 7
#
# $`7`
# [1] 22 15 8
sorted_list<- lapply(list_of3, function(x)sort(x))
final_vector <- unname(unlist(sorted_list))
final_vector
# > final_vector
# [1] 2 9 16 3 10 17 4 11 18 5 12 19 6 13 20 7 14 21 8 15 22```
uj5u.com熱心網友回復:
這是一種方法:
v <- as.integer(c(16,9,2,17,10,3,18,11,4,19,12,5,20,13,6,21,14,7,22,15,8))
res <- split(v, 0:(length(v)-1) %/%3)
unlist(lapply(res, sort), use.names = FALSE)
uj5u.com熱心網友回復:
您可以將資料逐行放入 3 列矩陣中,按行排序,轉置并轉換回向量:
v <- as.integer(c(16,9,2,17,10,3,18,11,4,19,12,5,20,13,6,21,14,7,22,15,8))
m <- matrix(v, ncol = 3, byrow = TRUE)
c(t(matrix(m[order(row(m), m)], nrow(m), byrow = TRUE)))
[1] 2 9 16 3 10 17 4 11 18 5 12 19 6 13 20 7 14 21 8 15 22
uj5u.com熱心網友回復:
這樣的事情經歷了每一步:
v = as.integer(c(16,9,2,17,10,3,18,11,4,19,12,5,20,13,6,21,14,7,22,15,8))
v2 = v %>% matrix(ncol= 3, byrow = T)
# [,1] [,2] [,3]
# [1,] 16 9 2
# [2,] 17 10 3
# [3,] 18 11 4
# [4,] 19 12 5
# [5,] 20 13 6
# [6,] 21 14 7
# [7,] 22 15 8
v3 = v2[, rev(seq_len(ncol(v2)))]
# [,1] [,2] [,3]
# [1,] 2 9 16
# [2,] 3 10 17
# [3,] 4 11 18
# [4,] 5 12 19
# [5,] 6 13 20
# [6,] 7 14 21
# [7,] 8 15 22
v4 = v3 %>% as.vector
# [1] 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/530669.html
標籤:r排序向量dplyr数字
上一篇:如果heapq.heapify(list)是O(N)而list.sort()是O(NlogN)那么為什么默認的排序演算法不是heapify?
