Конкатенация строк с - PullRequest
       4

Конкатенация строк с

9 голосов
/ 22 марта 2012

У меня есть фрейм данных с несколькими переменными.Я хочу создать строку, используя ( объединение ) имена переменных, но с чем-то другим между ними ...

Вот упрощенный пример ( число переменных сокращено дотолько 3, тогда как у меня фактически много )

Составление некоторого фрейма данных

 df1 <- data.frame(1,2,3) # A one row data frame
  names(df1) <- c('Location1','Location2','Location3') 

Фактический код ...

  len1 <- ncol(df1)
  string1 <- 'The locations that we are considering are'  
    for(i in 1:(len1-1))   string1 <- c(string1,paste(names(df1[i]),sep=','))

  string1 <- c(string1,'and',paste(names(df1[len1]),'.'))
  string1

Это дает ...

[1] "The locations that we are considering are"
[2] "Location1"                          
[3] "Location2"                          
[4] "Location3 ."

Но я хочу

Места, которые мы рассматриваем: Location1, Location2 и Location3.

Я уверен, что есть гораздо более простой метод, который некоторые из вас знали бы ... Спасибо за ваше время ...

Ответы [ 4 ]

22 голосов
/ 22 марта 2012

Вы ищете collapse аргумент paste?

> paste (letters [1:3], collapse = " and ")
[1] "a and b and c"
5 голосов
/ 22 марта 2012

Тот факт, что это имена data.frame, на самом деле не имеет значения, поэтому я вытащил эту часть и присвоил ее переменной strs.

strs <- names(df1)
len1 <- length(strs)
string1 <- paste("The locations that we are considering are ", 
                 paste(strs[-len1], collapse=", ", sep=""),
                 " and ",
                 strs[len1], 
                 ".\n", 
                 sep="")

Это дает

> cat(string1)
The locations that we are considering are Location1, Location2 and Location3.

Обратите внимание, что это не даст разумного английского, если в strs.

есть только 1 элемент.

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

2 голосов
/ 22 марта 2012

Если вашей основной целью является вывод результатов на экран (или другой вывод), тогда используйте функцию cat (имя которой происходит от конкатенации):

> cat(names(iris), sep=' and '); cat('\n')
Sepal.Length and Sepal.Width and Petal.Length and Petal.Width and Species

Если вам нужна переменная сстрока, тогда вы можете использовать paste с аргументом collapse.Функция sprintf также может быть полезна для вставки строк в другие строки (или чисел в строки).

0 голосов
/ 22 марта 2012

Другие варианты будут:

library(stringr)
str_c("The location that we are consiering are ", str_c(str_c(names(df1)[1:length(names(df1))-1], collapse=", "), names(df1)[length(names(df1))], sep=" and "))
...