Добавить значение после каждого n-го элемента вектора в R
есть много вопросов о том, как извлечь каждый N-й элемент вектора, но я не мог найти один из того, как легко добавить значение после каждого n-го элемента вектора. Есть ли простой способ добавить определенное значение после каждого n-го элемента в векторе?
например, предположим, что у нас есть два вектора:
v1 <- paste0(letters[1:3], rep(1:5, each = 3))
> v1
[1] "a1" "b1" "c1" "a2" "b2" "c2" "a3" "b3" "c3" "a4" "b4" "c4" "a5" "b5" "c5"
v2 <- paste0("header", seq(1:5))
> v2
[1] "header1" "header2" "header3" "header4" "header5"
теперь я хочу добавить элементы v2
после каждого третьего элемента v1
начиная с первого. Результат должен выглядеть так это:
[1] "header1" "a1" "b1" "c1" "header2" "a2" "b2" "c2" "header3" "a3" "b3" "c3" "header4" "a4" "b4" "c4" "header5" "a5" "b5" "c5"
2 ответов
вы можете сделать длинный вектор в матрицу с соответствующими размерами; вставьте заголовок сверху; а затем используйте c()
чтобы сгладить матрицу обратно в вектор.
построить пример:
v1 <- paste0(letters[1:3], rep(1:5, each = 3))
v2 <- paste0("header", seq(1:5))
сделайте матрицу и прикрепите заголовок:
r <- rbind(v2,matrix(v1,ncol=length(v2)))
## "header1" "header2" "header3" "header4" "header5"
## "a1" "a2" "a3" "a4" "a5"
## "b1" "b2" "b3" "b4" "b5"
## "c1" "c2" "c3" "c4" "c5"
теперь сплющите его:
c(r)
у нас можете split
' v1 ' с помощью переменной группировки (созданной с помощью %/%
) в виде list
, затем сцепить (c
) соответствующие элементы " v2 " с list
используя Map
и unlist
его.
unlist(Map(`c`, v2, split(v1, (seq_along(v1)-1)%/%3+1)), use.names=FALSE)
#[1] "header1" "a1" "b1" "c1" "header2" "a2" "b2"
#[8] "c2" "header3" "a3" "b3" "c3" "header4" "a4"
#[15] "b4" "c4" "header5" "a5" "b5" "c5"
или если длина " v1 "кратна " 3", мы можем создать matrix
С 'v1',cbind
'v2', транспонировать вывод и преобразовать matrix
to vector
С c
.
c(t(cbind(v2,matrix(v1, ncol=3, byrow=TRUE))))