2011-05-10 17 views
5

Rasgele bir sütun değerleri örneği için tüm satırları nasıl seçebilirim? Kullandığınız çoğaltabilirR - Rastgele sütun değerleri örneği için satırları seçin?

tag weight 

R007  10 
R007  11 
R007  9 
J102  11 
J102  9 
J102  13 
J102  10 
M942  3 
M054  9 
M054  12 
V671  12 
V671  13 
V671  9 
V671  12 
Z990  10 
Z990  11 

...

weights_df <- structure(list(tag = structure(c(4L, 4L, 4L, 1L, 1L, 1L, 1L, 
3L, 2L, 2L, 5L, 5L, 5L, 5L, 6L, 6L), .Label = c("J102", "M054", 
"M942", "R007", "V671", "Z990"), class = "factor"), value = c(10L, 
11L, 9L, 11L, 9L, 13L, 10L, 3L, 9L, 12L, 12L, 14L, 5L, 12L, 11L, 
15L)), .Names = c("tag", "value"), class = "data.frame", row.names = c(NA, 
-16L)) 

Ben yukarıdan tüm satırları içeren bir dataframe oluşturmanız gerekir:

ben şöyle bir dataframe var rastgele örneklenmiş iki etiket için veri ağı. etiketleri R007and M942 diyelim rastgele seçilmiş olsun, benim yeni dataframe böyle bakmak gerekiyor:

tag weight 

R007  10 
R007  11 
R007  9 
M942  3 

Bunu nasıl yapacağım?

Ben böyle iki rastgele etiketlerin listesini oluşturabilir biliyorum: in ...

tag count 
4 R007  3 
3 M942  1 

Ortaya

library(plyr) 
tags <- ddply(weights_df, .(tag), summarise, count = length(tag)) 
set.seed(5464) 
tag_sample <- tags[sample(nrow(tags),2),] 
tag_sample 

Ama sadece subsetine o nasıl kullanılacağını bilmiyorum Orijinal veri ağım. senin data.frame dfrm adı verilirse

cevap

7

İstediğin bu nedir?

subset(weights_df, tag%in%sample(levels(tag),2)) 
+0

Bunu kullanmanız önemsiz olurdu :) Teşekkürler! Aslında SQL'e benzer bir "in" operatörü bulmaya çalıştım ama hiçbir şeyle gelmedim. –

+0

hoş biri. Altüstün, 'levels' işlevinin çağrılmaya ihtiyaç duyduğunu düşünmüyorum. – Ramnath

+0

@Ramnath burada 'levels' gereklidir. – kohske

2

, o zaman bu seçecektir 100 rastgele tag s

dfrm[ sample(NROW(dfrm), 100), "tag" ] # possibly with repeats 

diğer taraftan, (muhtemelen tekrarlar) aynı sütunlu bir dataframe istiyorsanız:

samp <- dfrm[ sample(NROW(dfrm), 100), ] # leave the col name entry blank to get all 

üçüncü bir olasılık ... rastgele 100 farklı etiketler istiyorum ama hiç de frekansa ağırlıklı olasılık ile:

samp.tags <- unique(dfrm$tag)[ sample(length(unique(dfrm$tag)), 100] 

Düzenleme: Düzeltilmiş soru ile; Bunlardan biri:

subset(dfrm, tag %in% c("R007", "M942")) 

Veya:

dfrm[dfrm$tag %in% c("R007", "M942"), ] 

Veya:

dfrm[grep("R007|M942", dfrm$tag), ] 
+0

Özür dilerim, orijinal sorumun çok açık olduğundan emin değilim, bu yüzden cevabınızın yapmaya çalıştığım şey için geçerli olduğuna inanmıyorum. Güncellenen soru daha mantıklı mı? –

+0

Alt kümeyi ya da "[" ile% 'in% 'yi kullanarak –

İlgili konular