2011-11-17 35 views
16

Giả sử tôi có một số bảng, T. Giả sử T có 5 cột. Tôi hiểu cách chọn bất kỳ tập hợp con cột liên tiếp nào và lưu trữ chúng dưới dạng bảng mới. Đối với điều đó tôi sẽ sử dụng dấu ngoặc và dấu hai chấm ở bên phải dấu phẩy:Chọn các cột không liên tiếp trong bảng R

newT <- T[,2:4] # creates newT from columns 2 through 4 in T 

Nhưng làm cách nào để chọn các cột không liên tiếp để đặt dưới? Giả sử tôi muốn chọn Cột 1 và Cột 3? Làm thế nào để tôi làm việc này? Một loại lựa chọn tôi có thể muốn làm, và không chắc chắn làm thế nào để, được chọn ngẫu nhiên từ cột T.

+0

thể trùng lặp của [Cách để đọc chỉ chọn các cột từ một tệp vào R? (Một phương tiện vừa ý giữa 'read.table' và' scan'?)] (Http://stackoverflow.com/questions/2193742/ways-to-read-only-select-columns-from-a-file-into- ra-hạnh phúc-trung-giữa-tái) –

+2

Đặt tên đối tượng 'T' (hoặc 'F') có thể sẽ gây ra vấn đề xuống dòng - nó là tốt hơn để tránh nó. Ngoài ra có * là * "bảng" trong R, nhưng tôi đoán rằng bạn thực sự có một khung dữ liệu hoặc một ma trận. –

Trả lời

26

Bạn chỉ đơn giản là tạo ra các chỉ mục mà bạn muốn. Chức năng c cho phép bạn nối các giá trị. Các giá trị có thể là chỉ mục cột hoặc tên cột (nhưng không được trộn lẫn).

df <- data.frame(matrix(runif(100), 10)) 
cols <- c(1, 4:8, 10) 
df[,cols] 

Bạn cũng có thể chọn những cột chỉ số để loại bỏ bằng cách xác định một chỉ số tiêu cực:

df[, -c(3, 5)] # all but the third and fifth columns 
+0

Làm thế nào để thực hiện một cái gì đó như thế này? 'val <- 6 cols <- c (1, c (val-4: val-1)) df [, cols]' –

3

Nếu tôi hiểu câu hỏi của bạn một cách chính xác, bạn nên thử một cái gì đó tương tự như sau:

df1 = data.frame(state=c("KS","CO","CA","FL","CA"), value=c(1,2,3,7,9)) 
df1 

df1[c(c(1,3),4:5),] 
df1[c(1,3,4:5),] 
+0

Tôi thực sự thích cách giải quyết ngắn gọn của bạn, giữ tất cả trong một lệnh bằng hàm 'c'. Tuy nhiên, giải pháp của bạn tập hợp các hàng không liên tiếp trong khi câu hỏi trên hỏi làm thế nào để tập hợp các cột không liên tiếp, cho khung dữ liệu mẫu 'df <- data.frame (ma trận (runif (100), 10))' , sẽ giống như thế này 'df [, c (1,3,4: 5)] ' – coip

2

Đối với cột ngẫu nhiên kiểm tra ?sample

df <- data.frame(matrix(runif(25), 5)) 
df 
#   X1  X2   X3   X4  X5 
#1 0.7973941 0.6142358 0.07211461 0.01478683 0.6623704 
#2 0.8992845 0.8347466 0.54495115 0.52242817 0.4944838 
#3 0.8695551 0.9228987 0.00838420 0.58049324 0.9256282 
#4 0.1559048 0.7116077 0.08964883 0.06799828 0.3752833 
#5 0.2179599 0.4533054 0.60817319 0.62235228 0.8357441 

df[ ,sample(names(df), 3)] 
#   X5   X3  X2 
#1 0.6623704 0.07211461 0.6142358 
#2 0.4944838 0.54495115 0.8347466 
#3 0.9256282 0.00838420 0.9228987 
#4 0.3752833 0.08964883 0.7116077 
#5 0.8357441 0.60817319 0.4533054 
Các vấn đề liên quan