2013-10-05 13 views
6

bir dizi temel alan bir veri çerçevesinin yalnızca belirli satır tutulması. Veri çerçevesinin belirli satırlarını, o satırdaki Kİ değerinin başka bir değerler kümesine (örneğin, "sakla" olarak adlandırılır) karşılık gelip gelmediğine bağlı olarak tutmak istiyorum.Bir Kimlik sütunu ve değerler için birkaç sütunlu bir veri çerçevesi olan değerler

df <- data.frame(ID = sample(rep(letters, each=3)), value = rnorm(n=26*3)) 
keep <- c("a", "d", "r", "x") 

nasıl sadece tutmak eşleştiğinden kimlikleri sıra kapsayan yeni bir veri çerçevesi oluşturabilirsiniz:

Kolaylık olması açısından, burada örneğidir? Bunu sadece bir harf için which() işlevini kullanarak yapabilirim, ancak birden çok harfle uyarı iletileri ve yanlış döndürmeler alırım. Biliyorum ki, veri çerçevesinden bir döngü oluşturabilirim ve bu şekilde tahmin edebilirim, ama bunun hakkında daha şık ve verimli bir yol olup olmadığını merak ediyorum. Şimdiden teşekkürler.

+3

deneyin df [% keep, içinde df $ kimliği%] - bkz http://stat.ethz.ch/R-manual/R-devel/library/base /html/sets.html – Adrian

+1

@Adrian => yanıt… –

cevap

17

df[df$ID %in% keep, ] veya subset(df, ID %in% keep)'u deneyin - sets için yardım sayfasına bakın.

Düzenleme: Bu tek harf için olsaydı Ayrıca, sen mesela yazabilirsiniz which() kullanmak yerine df[df$ID == "a", ]. (% Keep içinde df, kimlik%) ya da alt kümesi

+0

Mükemmel, çok teşekkürler! Sadece bir harf extrapolating diğer yöntemi hakkında biliyorum, ama Ar ile benim tarih boyunca 'hangi()' yöntemi kullanılarak yapılmış ve bana sözdizimsel güzel görünüyor (yani herhangi bir mantıklı eğer ....) bu yüzden onunla sopa :) – user2849910

İlgili konular