2011-11-22 38 views
11

Điều này làm cho tôi cảm thấy câm, nhưng tôi đang cố gắng tạo ra một véc tơ/df/list/etc (bất kỳ thứ gì ngoài ma trận) nối hai yếu tố. Đây là kịch bản. Tôi có bộ dữ liệu dòng 100k. Tôi đã sử dụng nửa trên để dự đoán nửa dưới và ngược lại bằng cách sử dụng knn. Vì vậy, bây giờ tôi có 2 đối tượng được tạo bởi knn predict().R ghép hai yếu tố

> head(pred11) 
[1] 0 0 0 0 0 0 
Levels: 0 1 
> head(pred12) 
[1] 0 1 1 0 0 0 
Levels: 0 1 
> class(pred11) 
[1] "factor" 
> class(pred12) 
[1] "factor" 

Đây là nơi vấn đề của tôi bắt đầu:

> pred13 <- rbind(pred11, pred12) 
> class(pred13) 
[1] "matrix" 

Có 2 vấn đề. Đầu tiên nó thay đổi của 0 và 1 đến 1 và 2 và thứ hai nó dường như tạo ra một ma trận rất lớn đó là ăn tất cả bộ nhớ của tôi. Tôi đã cố gắng rối tung với as.numeric(), data.frame(), v.v., nhưng không thể kết hợp 2 nhân tố 50k thành 1 100k một. Bất kỳ đề xuất?

+0

Tiêu đề và mô tả làm tôi bối rối - có vẻ như bạn cần [* tương tác *] (https://stat.ethz.ch/pipermail/r-help/2008-November/178808.html) (xem?) của các yếu tố, nhưng trên thực tế bạn cần * ghép nối *. "Kết hợp" là cụm từ khá mơ hồ. Tôi sẽ cố gắng chỉnh sửa câu hỏi của bạn để làm rõ điều này. – TMS

Trả lời

18

rbind sẽ tạo ma trận 2 x 50000 trong trường hợp của bạn không phải là thứ bạn muốn. c là hàm chính xác để kết hợp 2 vectơ trong một vectơ dài hơn. Khi bạn sử dụng rbind hoặc c trên một hệ số, nó sẽ sử dụng các số nguyên cơ bản ánh xạ tới các cấp. Nói chung bạn cần phải kết hợp như một nhân vật trước khi refactoring:

x1 <- factor(sample(0:1,10,replace=T)) 
x2 <- factor(sample(0:1,10,replace=T)) 

factor(c(as.character(x1),as.character(x2))) 
[1] 1 1 1 0 1 1 0 1 0 0 0 1 1 1 1 1 1 0 0 0 
Levels: 0 1 
+0

Điều đó đã làm được. Cảm ơn nhiều! – screechOwl

26

@ James được trình bày một cách, tôi sẽ trong chip với nhau (ngắn hơn):

set.seed(42) 
x1 <- factor(sample(0:1,10,replace=T)) 
x2 <- factor(sample(0:1,10,replace=T)) 

unlist(list(x1,x2)) 
# [1] 1 1 0 1 1 1 1 0 1 1 0 1 1 0 0 1 1 0 0 1 
#Levels: 0 1 

... Đây có vẻ là một giống như ma thuật, nhưng unlist có hỗ trợ đặc biệt cho các yếu tố cho mục đích cụ thể này! Tất cả các yếu tố trong danh sách phải là yếu tố để điều này hoạt động.

+0

Wow. Một chút của aRcana. Bạn học cái đó ở đâu? –

+1

@DWin - Vâng, nó xuất hiện khi khám phá sự khác biệt giữa R và S + ... – Tommy

+0

+1000 cho câu trả lời của Tommy, nó cho phép tránh sử dụng 'as.character' và khi làm việc với các yếu tố, đây là __VERY__ dễ chịu –

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