2012-03-22 14 views
9

Mam ramkę danych z kilkoma zmiennymi. Co chcę jest utworzyć ciąg przy użyciu (konkatenacji) nazwy zmienny, ale z czegoś innego w między nimi ...Ciągi konkatenacyjne z

Oto uproszczony przykład (liczba zmiennych zmniejszona do tylko 3 natomiast mam faktycznie wiele)

Wykańczanie jakąś ramkę danych

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

Rzeczywisty kod ...

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 

daje to ...

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

Ale chcę

lokalizacje, które rozważamy są Location1, Location2 i Location3.

Jestem pewien, że jest znacznie prostszy sposób, który niektórzy z was będzie wiedział ... Dziękuję za Twój czas ...

Odpowiedz

22

Szukasz na collapse argument paste?

> paste (letters [1:3], collapse = " and ") 
[1] "a and b and c" 
+0

Niestety @ cbeleites Zrobiłem kilka edycji po odpowiedź –

+0

w tym przypadku, 'pasty ("Biorąc pod uwagę", wklej (głowica (nazwy (DF), -1) , collapse = ","), "and", tail (names (df), 1), ".", sep = ""). – cbeleites

2

Jeśli głównym celem jest, aby wydrukować wyniki na ekranie (lub innego wyjścia), a następnie użyj funkcji cat (którego nazwa wywodzi się od Złącz):

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

Jeśli potrzebujesz zmienną ciąg, następnie można użyć paste z argumentem collapse. Funkcja sprintf może być również przydatna do wstawiania ciągów do innych ciągów (lub liczb do łańcuchów).

5

Fakt, że są to nazwy elementu data.frame, nie ma większego znaczenia, więc wyciągnąłem tę część i przypisałem je do zmiennej 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="") 

Daje

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

pamiętać, że nie da sensownego po angielsku, jeśli jest tylko 1 element strs.

Chodzi o to, aby zwinąć wszystkie, oprócz ostatniego ciągu, przecinkami między nimi, a następnie wkleić je razem z tekstem standardowym i ostatnim ciągiem znaków.

0

innej opcji byłoby:

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 "))