2009-10-08 26 views
20

Tôi có một bảng tổng hợp:Làm thế nào để chọn các hàng từ data.frame với 2 điều kiện

> aggdata[1:4,] 
    Group.1 Group.2   x 
1  4 0.05 0.9214660 
2  6 0.05 0.9315789 
3  8 0.05 0.9526316 
4  10 0.05 0.9684211 

Làm thế nào tôi có thể chọn giá trị x khi tôi có giá trị cho Group.1 và Group.2?

tôi đã cố gắng:

aggdata[aggdata[,"Group.1"]==l && aggdata[,"Group.2"]==lamda,"x"] 

nhưng mà trả lời tất cả của x.

Thông tin thêm: Tôi muốn sử dụng này như thế này:

table = data.frame(); 
for(l in unique(aggdata[,"Group.1"])) { 
    for(lambda in unique(aggdata[,"Group.2"])) { 
     table[l,lambda] = aggdata[aggdata[,"Group.1"]==l & aggdata[,"Group.2"]==lambda,"x"] 
    } 
} 

Bất kỳ ý kiến ​​cho rằng thậm chí còn dễ dàng hơn và đem lại kết quả này, tôi đánh giá cao!

Trả lời

13

Sử dụng & không & &. Cái sau chỉ đánh giá phần tử đầu tiên của mỗi vectơ.

Cập nhật: để trả lời phần thứ hai, sử dụng gói định hình lại. Một cái gì đó như thế này sẽ làm điều đó:

tablex <- recast(aggdata, Group.1 ~ variable * Group.2, id.var=1:2) 
# Now add useful column and row names 
colnames(tablex) <- gsub("x_","",colnames(tablex)) 
rownames(tablex) <- tablex[,1] 
# Finally remove the redundant first column 
tablex <- tablex[,-1] 

Ai đó có nhiều kinh nghiệm sử dụng định hình lại có thể có giải pháp đơn giản hơn.

Lưu ý: Không sử dụng bảng làm tên biến vì nó xung đột với hàm table().

+0

Cảm ơn! Có vẻ như thực sự chọn 1 phần tử. Tuy nhiên, vòng lặp của tôi đưa ra lỗi: "Lỗi trong x [[jj]] <- vjj [FALSE]: cố gắng chọn ít hơn một phần tử" Nó vẫn không chính xác? –

+0

Lỗi đó được tạo bởi vì bạn sử dụng bảng [l, lambda] khi lambda nhỏ hơn một. –

+0

Tôi không thể tìm ra những gì bạn đang cố gắng làm vì các yếu tố nhóm không phải là duy nhất. –

20

Giải pháp dễ nhất là thay đổi "& &" thành "&" trong mã của bạn.

> aggdata[aggdata[,"Group.1"]==6 & aggdata[,"Group.2"]==0.05,"x"] 
[1] 0.9315789 

giải pháp ưa thích của tôi sẽ được sử dụng tập hợp con():

> subset(aggdata, Group.1==6 & Group.2==0.05)$x 
[1] 0.9315789 
+1

Tại sao bạn thích tập con? Chỉ cần gây ra nó là một chút neater? – naught101

7

Có một tài liệu thực sự hữu ích trên Subsetting khung R dữ liệu tại địa chỉ: http://www.ats.ucla.edu/stat/r/modules/subsetting.htm

Dưới đây là trích đoạn có liên quan:

Subsetting rows using multiple conditional statements: There is no limit to how many logical statements may be combined to achieve the subsetting that is desired. The data frame x.sub1 contains only the observations for which the values of the variable y is greater than 2 and for which the variable V1 is greater than 0.6.

x.sub1 <- subset(x.df, y > 2 & V1 > 0.6)

+0

Liên kết này có vẻ là thực tế: http://www.ats.ucla.edu/stat/r/faq/subset_R.htm. Không biết chắc chắn nhưng đoạn trích dẫn là có. – Marek

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