Yanıtlar:
İlk önce bazı veriler yapın:
> df = data.frame(matrix(rnorm(20), nrow=10))
> df
X1 X2
1 0.7091409 -1.4061361
2 -1.1334614 -0.1973846
3 2.3343391 -0.4385071
4 -0.9040278 -0.6593677
5 0.4180331 -1.2592415
6 0.7572246 -0.5463655
7 -0.8996483 0.4231117
8 -1.0356774 -0.1640883
9 -0.3983045 0.7157506
10 -0.9060305 2.3234110
Ardından rastgele bazı satırları seçin:
> df[sample(nrow(df), 3), ]
X1 X2
9 -0.3983045 0.7157506
2 -1.1334614 -0.1973846
10 -0.9060305 2.3234110
set.seed(42)
Belirli bir örneği her üretmek istediğinizde tohumunuzu (ör. ) Ayarlamayı unutmayın .
sample.int
biraz daha hızlı olurdu inanıyorum:library(microbenchmark);microbenchmark( sample( 10000, 100 ), sample.int( 10000, 100 ), times = 10000 )
John Colby'nin verdiği cevap doğru cevaptır. Ancak bir dplyr
kullanıcıysanız, cevap da vardır sample_n
:
sample_n(df, 10)
veri çerçevesinden rastgele 10 satır örnekler. Bu sample.int
, gerçekten daha az yazarak aynı cevabı çağırıyor (ve veri çerçevesi ilk argüman olduğu için magrittr bağlamında kullanımı basitleştiriyor).
data.table
Paket fonksiyonu sağlar DT[sample(.N, M)]
veri tablosu M rastgele satır örnekleme DT
.
library(data.table)
set.seed(10)
mtcars <- data.table(mtcars)
mtcars[sample(.N, 6)]
mpg cyl disp hp drat wt qsec vs am gear carb
1: 14.7 8 440.0 230 3.23 5.345 17.42 0 0 3 4
2: 19.2 6 167.6 123 3.92 3.440 18.30 1 0 4 4
3: 17.3 8 275.8 180 3.07 3.730 17.60 0 0 3 3
4: 21.5 4 120.1 97 3.70 2.465 20.01 1 0 3 1
5: 22.8 4 108.0 93 3.85 2.320 18.61 1 1 4 1
6: 15.5 8 318.0 150 2.76 3.520 16.87 0 0 3 2
Sadece bütünlük uğruna:
dplyr ayrıca numunenin bir kısmını veya bir kısmını
df %>% sample_frac(0.33)
Bu, örneğin% 80 gibi belirli bir bölünme oranı yapmanız gerektiğinde makine öğreniminde çok uygundur.
EDIT : Bu cevap şimdi güncel değil, güncellenmiş sürüme bakın .
In my R paketin ben arttırmıştır sample
veri çerçevelerinin de beklendiği gibi şimdi davranır böylece:
library(devtools); install_github('kimisc', 'krlmlr')
library(kimisc)
example(sample.data.frame)
smpl..> set.seed(42)
smpl..> sample(data.frame(a=c(1,2,3), b=c(4,5,6),
row.names=c('a', 'b', 'c')), 10, replace=TRUE)
a b
c 3 6
c.1 3 6
a 1 4
c.2 3 6
b 2 5
b.1 2 5
c.3 3 6
a.1 1 4
b.2 2 5
c.4 3 6
Bu, bir S3 genel yöntemi yapılarak ve bir işlevde gerekli (önemsiz) işlevselliği sağlayarak elde edilir sample
. Her setMethod
şeyi düzeltmek için bir çağrı . Orijinal uygulamaya hala erişilebilir base::sample
.
sample.default(df, ...)
veri çerçevesi çağırdığımda , veri çerçevesi aynı uzunluktaki vektörlerin bir listesi olarak uygulandığından, veri çerçevesinin sütunlarındandf
örnekler .
install_github('kimisc', 'krlmlr')
ve aldım Error: Does not appear to be an R package (no DESCRIPTION)
. Bunun herhangi bir yolu var mı?
[
Veri çerçevelerinin operatör karşı-bir. Ayrıca, lütfen söyle: Hiç, sadece bir kez, sample
bir veri çerçevesindeki sütunları örneklemek için kullandınız mı?
iris[2]
bir liste gibi çalışır iris[[2]]
. Veya iris$Species
,, lapply(iris, mean)
... Veri çerçeveleri listelerdir. Bu yüzden onların onlar gibi davranmasını bekliyorum. Ve evet, aslında örnek (myDataframe) kullandım. Her değişkenin tek bir genin ifade verilerini içerdiği bir veri kümesinde. Özel yönteminiz acemi kullanıcılara yardımcı olur, ancak sample()
davranış biçimini etkili bir şekilde değiştirir . Not Bir programcının bakış açısından "beklendiği gibi" kullanıyorum. Hangi genel sezgi farklıdır. R'de genel sezgi ile uyumlu olmayan çok şey var ...;)
Eski cevap. Lütfen
dplyr::sample_frac()
veyadplyr::sample_n()
yerine kullanın.
In my R paketinin bir fonksiyon vardır sample.rows
sadece bu amaç için:
install.packages('kimisc')
library(kimisc)
example(sample.rows)
smpl..> set.seed(42)
smpl..> sample.rows(data.frame(a=c(1,2,3), b=c(4,5,6),
row.names=c('a', 'b', 'c')), 10, replace=TRUE)
a b
c 3 6
c.1 3 6
a 1 4
c.2 3 6
b 2 5
b.1 2 5
c.3 3 6
a.1 1 4
b.2 2 5
c.4 3 6
Geliştirilmesi sample
bir jenerik S3 işlevi yaparak için Joris MEYS yorumlarına göre, kötü bir fikirdi önceki cevabı .
R'de bir tibble türünden Rastgele bir örnek seçin:
library("tibble")
a <- your_tibble[sample(1:nrow(your_tibble), 150),]
nrow bir tibble alır ve satır sayısını döndürür. Aktarılan ilk parametre sample
, tibble'ınızın sonuna 1 ila aralığıdır. Numuneye (150) iletilen ikinci parametre, kaç tane rastgele örnekleme istediğinizdir. Köşeli parantez dilimleme, döndürülen dizinlerin satırlarını belirtir. Değişken 'a' rastgele örneklemenin değerini alır.
Bunu yapabilirsin:
library(dplyr)
cols <- paste0("a", 1:10)
tab <- matrix(1:1000, nrow = 100) %>% as.tibble() %>% set_names(cols)
tab
# A tibble: 100 x 10
a1 a2 a3 a4 a5 a6 a7 a8 a9 a10
<int> <int> <int> <int> <int> <int> <int> <int> <int> <int>
1 1 101 201 301 401 501 601 701 801 901
2 2 102 202 302 402 502 602 702 802 902
3 3 103 203 303 403 503 603 703 803 903
4 4 104 204 304 404 504 604 704 804 904
5 5 105 205 305 405 505 605 705 805 905
6 6 106 206 306 406 506 606 706 806 906
7 7 107 207 307 407 507 607 707 807 907
8 8 108 208 308 408 508 608 708 808 908
9 9 109 209 309 409 509 609 709 809 909
10 10 110 210 310 410 510 610 710 810 910
# ... with 90 more rows
Yukarıda sadece 10 sütun ve 100 satırlı bir veri çerçevesi yaptım, tamam mı?
Şimdi ile örnekleyebilirsiniz sample_n
:
sample_n(tab, size = 800, replace = T)
# A tibble: 800 x 10
a1 a2 a3 a4 a5 a6 a7 a8 a9 a10
<int> <int> <int> <int> <int> <int> <int> <int> <int> <int>
1 53 153 253 353 453 553 653 753 853 953
2 14 114 214 314 414 514 614 714 814 914
3 10 110 210 310 410 510 610 710 810 910
4 70 170 270 370 470 570 670 770 870 970
5 36 136 236 336 436 536 636 736 836 936
6 77 177 277 377 477 577 677 777 877 977
7 13 113 213 313 413 513 613 713 813 913
8 58 158 258 358 458 558 658 758 858 958
9 29 129 229 329 429 529 629 729 829 929
10 3 103 203 303 403 503 603 703 803 903
# ... with 790 more rows
R'de yeniyim, ama benim için çalışan bu kolay yöntemi kullanıyordum:
sample_of_diamonds <- diamonds[sample(nrow(diamonds),100),]
Not: Düşünmediğim bir dezavantajı varsa not etmekte özgürsünüz.
?sample
işlev hakkında okumak için R konsoluna da yazabilirsiniz .