Конкатенация двух векторов строк с указанием порядка c - PullRequest
1 голос
/ 05 февраля 2020

Я хотел бы объединить два вектора. Я уже знаю, как это сделать, но есть только одна проблема - порядок.

Итак, я использую функцию ниже, чтобы связать векторы, но вывод не тот, который я хотел бы получить:

var_names <- c("Tim", "Jack", "Tom")
var_tp<- c("0", "40", "-u")

vec <- paste(rep(var_names, 3), var_tp, sep="_")

Вывод:

> vec
[1] "Tim_0"   "Jack_40" "Tom_-u"  "Tim_0"   "Jack_40" "Tom_-u"  "Tim_0"   "Jack_40" "Tom_-u"

Мой желаемый вывод - сохранить порядок, как это было в исходных векторах, с приоритетом names над tp.

Желаемый вывод:

> vec
[1] "Tim_0"   "Tim_40" "Tim_-u"  "Jack_0"   "Jack_40" "Jack_-u"  "Tom_0"   "Tom_40" "Tom_-u"

Ответы [ 3 ]

4 голосов
/ 05 февраля 2020

Просто используя каждый

vec <- paste(rep(var_names, each=3), var_tp, sep="_")
[1] "Tim_0"   "Tim_40"  "Tim_-u"  "Jack_0"  "Jack_40" "Jack_-u" "Tom_0"   "Tom_40"  "Tom_-u"
2 голосов
/ 05 февраля 2020

Еще один вариант может быть:

unlist(lapply(var_names, paste, sep = "_", var_tp))

[1] "Tim_0"   "Tim_40"  "Tim_-u"  "Jack_0"  "Jack_40" "Jack_-u" "Tom_0"   "Tom_40" 
[9] "Tom_-u" 
2 голосов
/ 05 февраля 2020

Другое решение заключается в использовании outer

vec <- c(t(outer(var_names,var_tp,paste, sep = "_")))

таким, что

> vec
[1] "Tim_0"   "Tim_40"  "Tim_-u"  "Jack_0"  "Jack_40" "Jack_-u"
[7] "Tom_0"   "Tom_40"  "Tom_-u" 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...