2014-05-15 18 views
5

Trong một đoạn mã của tôi, tôi cần chọn một số cột ma trận dựa trên ma trận nhị phân mà tôi có và lưu trữ trong danh sách, nhưng tôi phải đối mặt với vấn đề sau. Có ai biết vấn đề là gì không? Đây là ma trận và mã của tôi:Chọn các cột ma trận dựa trên vector nhị phân

> data 
     A B C D 
    [1,] 1 6 11 16 
    [2,] 2 7 12 17 
    [3,] 3 8 13 18 
    [4,] 4 9 14 19 
    [5,] 5 10 15 20 

    > select<-c(1,0,1,0) 

> p<-data[,select, drop=FALSE] 
> p 
    A A 
[1,] 1 1 
[2,] 2 2 
[3,] 3 3 
[4,] 4 4 
[5,] 5 5 

sản lượng dự kiến ​​của tôi là:

> p 
    A C 
[1,] 1 11 
[2,] 2 12 
[3,] 3 13 
[4,] 4 14 
[5,] 5 15 

Trả lời

4

Bạn sẽ cần phải chuyển nó sang một vector logic hoặc nếu không nó sẽ đối xử với 1 và 0 là số cột:

data[,as.logical(select), drop=F] 
# A C 
# 1 1 11 
# 2 2 12 
# 3 3 13 
# 4 4 14 
# 5 5 15 
+0

Làm cách nào để giữ nguyên tên cột? – user2806363

+1

@ user2806363 Bạn đã thử trên dữ liệu của riêng mình chưa? Vì bạn không thực hiện một cách dễ dàng để sao chép/dán dữ liệu của bạn vào R, josilber có lẽ không thêm các tên màu vào dữ liệu thử nghiệm của mình. Phương thức này sẽ bảo toàn các tên. – MrFlick

+0

@ user2806363 Tôi đã cập nhật 'dữ liệu' để có tên cột - phương pháp này giúp bảo tồn tên cột. – josliber

3

Bạn cũng có thể thử. Khi bạn chỉ đang cung cấp select, bạn đang yêu cầu chọn cột theo số cột. Khi bạn đang cung cấp select==1, trước hết bạn sẽ nhận được một vectơ logic và sử dụng nó để chọn các cột.

data <- matrix(1:20, nrow = 5, dimnames = list(NULL, c("A", "B", "C", "D"))) 
select <- c(1, 0, 1, 0) 
data[, select == 1] 
##  A C 
## [1,] 1 11 
## [2,] 2 12 
## [3,] 3 13 
## [4,] 4 14 
## [5,] 5 15 
Các vấn đề liên quan