2012-03-22 54 views
9

Tôi có một khung dữ liệu với nhiều biến. Những gì tôi muốn là tạo ra một chuỗi sử dụng (nối) tên biến nhưng với cái gì khác ở giữa chúng ...Ghép nối các chuỗi với

Đây là một ví dụ đơn giản (số biến giảm xuống chỉ có 3 trong khi tôi có thực sự nhiều)

Chiếm một số khung dữ liệu

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

mã thực tế ...

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 

Điều này cho phép ...

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

Nhưng tôi muốn

Các địa điểm mà chúng ta đang xem xét là LOCATION1, LOCATION2 và LOCATION3.

tôi chắc chắn có một phương pháp đơn giản hơn nhiều mà một số bạn sẽ biết ... Cám ơn các bạn thời gian ...

Trả lời

22

Bạn đang tìm kiếm các đối số của collapsepaste?

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

Xin lỗi @ cbeleites tôi đã làm một số chỉnh sửa sau khi câu trả lời của bạn –

+0

Trong trường hợp đó, 'dán ("Xét", dán (đầu (tên (df), -1) , collapse = ","), "và", đuôi (tên (df), 1), ".", sep = ""). – cbeleites

2

Nếu mục tiêu chính của bạn là để in kết quả ra màn hình (hoặc đầu ra khác) sau đó sử dụng cat chức năng (có tên xuất phát từ concatenate):

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

Nếu bạn cần một biến với chuỗi, sau đó bạn có thể sử dụng paste với đối số collapse. Chức năng sprintf cũng có thể hữu ích cho việc chèn chuỗi vào các chuỗi khác (hoặc số thành chuỗi).

5

Thực tế rằng đây là những tên của một data.frame không thực sự quan trọng, vì vậy tôi đã kéo phần đó ra và gán chúng vào một biến 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="") 

Điều này cho phép

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

Lưu ý rằng điều này sẽ không cung cấp cho hợp lý bằng tiếng Anh nếu chỉ có 1 phần tử trong strs.

Ý tưởng là thu gọn tất cả trừ chuỗi cuối cùng bằng dấu phẩy giữa chúng, sau đó dán cùng với văn bản bản mẫu và chuỗi cuối cùng.

0

Một tùy chọn khác sẽ là:

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 ")) 
Các vấn đề liên quan