2011-11-02 26 views
9

Tôi muốn nhập một khung dữ liệu vào dán và tôi muốn dán để xử lý nó như thể tôi đã nhập riêng các cột của khung dữ liệu đó. Lý do tôi muốn làm điều này là bởi vì tôi không chắc chắn bao nhiêu cột dataframe của tôi sẽ có. Ở đây nó có 2, nhưng tôi muốn một giải pháp chung để đối phó với bất kỳ số lượng các cột.phương pháp dán cho một khung dữ liệu

Kết quả mong muốn của tôi là test1paste trong mã sau. Nhưng tôi không muốn đề cập đến các cột một cách rõ ràng. My apply cố gắng dễ dàng thất bại vì nó hoạt động riêng lẻ trên các cột, tuy nhiên tôi nghĩ rằng nó vượt qua các giải pháp tôi đang tìm kiếm.

> test1 <- 
+ structure(c(42.71, 41.69, 46.95, 48.85, 45.26, 44.71, 43.71, 
+ 42.69, 47.95, 49.85, 46.26, 45.71), .Dim = c(6L, 2L)) 
> 
> test1paste <- paste(test1[,1],test1[,2], sep = "&") 
> test1paste 
[1] "42.71&43.71" "41.69&42.69" "46.95&47.95" "48.85&49.85" "45.26&46.26" 
[6] "44.71&45.71" 
> 
> apply(test1,MARGIN=2,paste,sep="&") 
    [,1] [,2] 
[1,] "42.71" "43.71" 
[2,] "41.69" "42.69" 
[3,] "46.95" "47.95" 
[4,] "48.85" "49.85" 
[5,] "45.26" "46.26" 
[6,] "44.71" "45.71" 

Bất kỳ ý tưởng nào?

Cảm ơn!

+0

Điều này có liên quan gì đến LaTeX không? –

+0

@Roman Vâng, bạn đã đoán rồi! Tôi không sử dụng 'xtable' vì tôi muốn có các lỗi tiêu chuẩn đi theo ước tính bên trong dấu ngoặc đơn. –

+0

Bạn đọc tôi như một cuốn sách mở. :) –

Trả lời

7

Làm thế nào về điều này:

> apply(test1,1,paste,collapse="&") 
[1] "42.71&43.71" "41.69&42.69" "46.95&47.95" "48.85&49.85" "45.26&46.26" 
[6] "44.71&45.71" 
+0

cảm ơn đó chính xác là những gì tôi cần. –

8

Nếu bạn "dataframe" thực sự là một data.frame (và không phải là một matrix như trong ví dụ của bạn), bạn có thể sử dụng do.call trực tiếp:

testdf <- as.data.frame(test1) 
do.call(paste, c(testdf, sep="&")) 

này dựa trên thực tế là một data.frame là một vinh quang listdo.call có danh sách các đối số. Tôi chỉ thêm đối số sep vào danh sách ...

Thông báo trước nhỏ: nếu bất kỳ tên cột nào là "sep" hoặc "thu gọn", bạn có thể gặp sự cố. Việc xóa tên cột sẽ giúp ích trong trường hợp đó:

do.call(paste, c(unname(testdf), sep="&")) 
+0

cảm ơn bạn! Tôi cần phải học 'do.call' vì nó có vẻ cực kỳ hữu ích. Và tôi xin lỗi vì đã sử dụng ma trận làm ví dụ mà không phải rõ ràng cái nào tôi quan tâm. Cảm ơn vì giải pháp cẩn thận của bạn. –

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