2011-09-23 45 views
10

Tôi đã đọc trong tệp csv ở dạng ma trận (có m hàng và cột n). Tôi muốn lọc ma trận bằng cách tiến hành lọc theo dạng miệng:Lọc khung dữ liệu

Chọn tất cả các giá trị từ cột x, trong đó các giá trị của một cột khác trong hàng này bằng "blabla".

Nó giống như một câu lệnh chọn trong cơ sở dữ liệu mà tôi nói rằng tôi quan tâm đến một tập hợp con của ma trận nơi những ràng buộc này cần phải được thỏa mãn.

Tôi có thể làm điều đó bằng cách nào? Tôi có dữ liệu dưới dạng dataframe và có thể truy cập dữ liệu bằng tiêu đề. data["column_values" = "15"] không cho tôi trở lại các hàng nơi cột có tên column_values ​​chỉ có giá trị 15.

Cảm ơn

Trả lời

15

Bạn đã nói bạn chỉ muốn cột x giá trị trong đó column_values ​​là 15, phải không?

subset(dat, column_values==15, select=x) 

Tôi nghĩ rằng điều này có thể là một khung dữ liệu nên có thể bạn cần phải bỏ niêm yết() và thậm chí có thể "không hoạt động".

> dat 
    Subject Product 
1  1 ProdA 
2  1 ProdB 
3  1 ProdC 
4  2 ProdB 
5  2 ProdC 
6  2 ProdD 
7  3 ProdA 
8  3 ProdB 
> subset(dat, Subject==2, Product) 
    Product 
4 ProdB 
5 ProdC 
6 ProdD 
> unlist(subset(dat, Subject==2, Product)) 
Product1 Product2 Product3 
    ProdB ProdC ProdD 
Levels: ProdA ProdB ProdC ProdD 
> as.character(unlist(subset(dat, Subject==2, Product))) 
[1] "ProdB" "ProdC" "ProdD" 

Nếu bạn muốn tất cả các cột bạn có thể thả số thứ ba (select = tham số):

subset(dat, Subject==2) 

    Subject Product 
4  2 ProdB 
5  2 ProdC 
6  2 ProdD 
+0

cảm ơn cho phản ứng. Trên thực tế tôi muốn có toàn bộ tập hợp con, tôi cũng có nghĩa là với các cột khác. bạn có thể vui lòng chỉ cho tôi cách tôi có thể có kết quả 2 Prod B hay không; 2 ProdC; 2 ProdC trở lại? Trong trường hợp của tôi, tôi muốn lọc hơn một cột như Jack đã cho thấy. Nhưng nó vẫn không hoạt động. bạn có thấy lỗi không? Cảm ơn! – Bob

+0

Đăng chỉnh sửa. Bạn có thể chỉ định bất kỳ kết hợp nào của các thừa số trong một vectơ của các tên cột được trích dẫn hoặc không được trích dẫn. 'subset' cũng sẽ bỏ qua tất cả những trận đấu NA gây phiền nhiễu mà tôi ghét và những người khác đánh giá cao. –

+0

Tôi đã thử tập con (dữ liệu, V1 == "stochastic", V6 == "độc lập"). Nhưng nó không hoạt động. V1 và V6 là hai tiêu đề cột. Kết quả trở lại là> tập hợp con (dữ liệu, V1 == "stochastic", V6 == "độc lập") khung dữ liệu với 0 cột và 196 hàng Tại sao tôi không nhận được toàn bộ dữ liệu ở dạng ban đầu của nó mà chỉ có các hàng nơi v1 và v6 hài lòng? – Bob

8

Giả sử rằng dat là khung dữ liệu trong câu hỏi, col là tên của cột và "value" là giá trị mà bạn muốn, bạn có thể làm

dat[dat$col=="value",]

Đó lấy về tất cả của các hàng của dat, trong đó dat$col=="value" và tất cả các cột.

+0

làm cách nào tôi có thể chọn trên hai cột? Một cột đang hoạt động tốt. Ví dụ, tôi đã thử dữ liệu này [dữ liệu $ V1 == "stochastic", dữ liệu $ V6 == "độc lập",] làm cách nào tôi có thể nhận ra và hoạt động khi chọn hơn hai cột? – Bob

+0

'dữ liệu [dữ liệu $ V1 ==" stochastic "&& dữ liệu $ V6 ==" độc lập ",]' –

+0

dữ liệu [dữ liệu $ V1 == "stochastic" && dữ liệu $ V6 == "stochastic",] [1] V1 V2 V3 V4 V5 V6 V7 V8 V9 V10 V11 V12 V18 V19 V15 V16 V17 V18 V19 V20 V21 V22 V23 <0 rows> (hoặc hàng có chiều dài 0) nó không hiển thị kết quả. Tôi chắc chắn rằng kết quả không được để trống. Bất kỳ ý tưởng? – Bob

4

Đầu tiên, lưu ý rằng một matrixdata.frame những điều khác nhau trong R. Tôi hãy tưởng tượng bạn có một data.frame (vì đó là những gì được trả về bởi read.csv()). data.frame có các cột được đặt tên (nếu bạn không cung cấp cho chúng, các cột chung được tạo cho bạn).

Bạn có thể đặt một số data.frame bằng cách cho biết cả hàng nào bạn muốn và/hoặc cột nào bạn muốn. Cách dễ nhất để chỉ định những hàng nào có vectơ lôgíc, thường được xây dựng dựa trên so sánh sử dụng các cột cụ thể của data.frame. Ví dụ: data[["column values"]] == "15" sẽ tạo một vectơ logic là TRUE nếu mục nhập tương ứng trong cột column values là chuỗi "15" (vì nó nằm trong dấu ngoặc kép, nó là một chuỗi, không phải là số). Bạn có thể thực hiện các tiêu chí lựa chọn phức tạp như bạn muốn (kết hợp các vectơ logic với &|) để chỉ định các hàng bạn muốn. Vector này trở thành đối số đầu tiên trong việc lập chỉ mục.

Danh sách tên cột hoặc số có thể là đối số thứ hai. Nếu một trong hai đối số bị thiếu, tất cả các hàng (hoặc cột) được giả định.

Đưa tất cả điều này với nhau, bạn sẽ có được ví dụ như

data[data[["column values"]] == "15", ] 

hoặc sử dụng một bộ dữ liệu thực tế (mtcars)

mtcars[mtcars$am == 1, ] 
mtcars[mtcars$am == 1 & mtcars$hp > 100, "mpg"] 
mtcars[mtcars$am == 1 & mtcars$hp > 100, "mpg", drop=FALSE] 
mtcars[mtcars$hp > 100, c("mpg", "carb")] 

Hãy nhìn vào những gì mỗi người trong số các điều kiện (đối số đầu tiên, ví dụ: mtcars$am == 1 & mtcars$hp > 100) quay lại để hiểu rõ hơn về cách lập chỉ mục hoạt động.

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