2010-11-18 44 views
11

Có hoạt động "theo hàng" trong R để chuyển đổi mỗi hàng trong một vectơ như thế này thành chuỗi không?Trong R: Nối các phần tử vectơ theo hàng, chuyển đổi các hàng vectơ thành chuỗi

> d= cbind("Data", c("2", "73")) 
> d 
    [,1] [,2] 
[1,] "Data" "2" 
[2,] "Data" "73" 

Những gì tôi muốn là để có được chuỗi như

 [,1] 
[1,] "Data 2" 
[2,] "Data 73" 

Có một cách dễ dàng để tham gia các mục bằng cách liên tiếp?

Trả lời

18

Có, có. Nó được gọi là "áp dụng" ;-)

apply(d,1,paste,collapse=" ") 
[1] "Data 2" "Data 73" 
# convert to matrix using as.matrix to get exactly your solution 

Xem ?apply?paste

+0

blarg, tất nhiên, áp dụng, duh :(Nhưng dán, thu gọn = "" phần tôi sẽ không bao giờ tìm ra, cảm ơn :) – gakera

+0

@gakera: Tìm phần 'collapse =" "' khá dễ dàng nếu bạn đọc tài liệu '? dán'. –

+0

Trợ giúp không bao gồm bất kỳ ví dụ nào về việc thu gọn = "" sử dụng, ít nhất là không có trong phiên bản của tôi. Nhưng từ các văn bản nó là kinda rõ ràng những gì nó làm, một khi bạn nhìn thấy nó trong tất cả các tiếng ồn. – gakera

3

Sau một glace nhanh ?paste, thì rõ ràng rằng apply là không cần thiết cho các ví dụ cụ thể. Nó sẽ có ích nếu có một số cột mặc dù.

> paste(d[,1],d[,2]) 
[1] "Data 2" "Data 73" 
+0

Nhưng tôi cần một cách tổng quát hoạt động mà không cần chỉ rõ các hàng một cách rõ ràng. Tôi xin lỗi tôi đã không đủ rõ ràng về điều đó, nhưng phương pháp áp dụng hoạt động rất tốt cho những gì tôi cần làm. – gakera

+0

+1: rất đúng. –

1

Một cách tổng quát để làm điều đó mà không cần đến ?apply:

do.call(paste, as.data.frame(d)) 
[1] "Data 2" "Data 73" 

đâu as.data.frame được sử dụng để tránh subscript.

Edit:

do.call là một chức năng trong đó có chức năng khác như là đối số đầu tiên, và một danh sách như là đối số thứ hai. Nó thường được sử dụng để gửi danh sách các đối số cho các hàm (trong trường hợp của chúng ta, các cột của d đến paste()). Chúng tôi gửi d như một data.frame (một loại danh sách) cho lừa này để làm việc.

+0

Đó là sự thật. Hiệu suất đạt được sẽ lớn hơn nếu dữ liệu đã là data.frame, nhưng giải pháp 'apply()' nhanh hơn nhiều đối với các vectơ. Ưu điểm trong điều này là người ta không cần giới hạn mình vào một kiểu dữ liệu duy nhất khi áp dụng dán, nhưng cũng có nhiều nhược điểm: ví dụ, dán bằng các hàng thay vì cột chỉ yêu cầu thay đổi số trong 'apply() 'giải pháp, trong khi điều này đòi hỏi những thay đổi mã lớn. Nhìn chung, giải pháp này chỉ dành cho các trường hợp sử dụng điển hình của tôi, nơi tôi đã làm một chỉ mục với 'expand.grid()' và nối chúng với 'do.call (paste)' –

Các vấn đề liên quan