Как объединить элементы строки, сохраняя ("") - PullRequest
0 голосов
/ 08 апреля 2019

Я хочу объединить элементы вектора символов:

vector<-c("Hello", "World", "Today")
vector
[1] "Hello" "World" "Today"

Я хочу вставить запятую между всеми элементами и поддерживать ("") каждого символа.Окончательный результат должен выглядеть следующим образом:

"Hello","World","Today"

Возможно ли это сделать в R, я пробовал с paste и paste0, но пока безуспешно!

Ответы [ 3 ]

3 голосов
/ 08 апреля 2019

Это один из способов.Обратите внимание, что " s экранированы , когда они являются частью строки символов.

v <- c("Hello", "World", "Today")

v2 <- paste0("\"", v, "\"", collapse=", ")

cat(v2)

# "Hello", "World", "Today"
2 голосов
/ 08 апреля 2019

1) Используйте shQuote, чтобы добавить двойные кавычки, а затем toString, чтобы вставить между ними пробел:

toString(shQuote(v))
## [1] "\"Hello\", \"World\", \"Today\""

2) Если важно, чтобы не было места, тогда:

paste(shQuote(v), collapse = ",")
## [1] "\"Hello\",\"World\",\"Today\""

3) Другой подход - через sprintf (или используйте paste, как указано выше):

toString(sprintf('"%s"', v))
## [1] "\"Hello\", \"World\", \"Today\""

Обратите внимание, что обратные слеши на самом деле не в строках, а просто показаны print, поэтому вы знаете, что следующая двойная кавычка является частью строки, а не разделителем, который сигнализирует конец строки.

0 голосов
/ 08 апреля 2019

Стоит отметить, что, даже когда вы печатаете " символов при печати вашего вектора, эти символы на самом деле не являются частью вектора - они просто показаны R как удобный способ показать отдельные строки в символьный вектор. Это можно увидеть, если использовать cat для отображения содержимого вектора как есть .

v <- c("Hello", "World", "Today")
cat(v)
#Hello World Today

В зависимости от вашего варианта использования вполне вероятно, что вам на самом деле не нужно вставлять фактические запятые и кавычки в данные, а просто отображать их при печати. Если это желаемый эффект, вы можете достичь его, определив новый класс для этих векторов и метод печати, чтобы определить, как они отображаются:

class(v) = c('comma')
print.comma = function(x,...) cat(paste0('"',x,'"', collapse = ','))    
v 
# "Hello","World","Today"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...