簡體   English   中英

使用嵌套條件提取data.frame中的行的隨機樣本

[英]Extracting a random sample of rows in a data.frame with a nested conditional

這個問題來自這里發現的SO帖子並使用從R-help郵件列表上的帖子修改的代碼, 這里可以看到

我試圖在數據框中提取行的隨機樣本,但使用條件。 使用R iris數據,如下所示:

> head(iris)
  Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1          5.1         3.5          1.4         0.2  setosa
2          4.9         3.0          1.4         0.2  setosa
3          4.7         3.2          1.3         0.2  setosa
4          4.6         3.1          1.5         0.2  setosa
5          5.0         3.6          1.4         0.2  setosa
6          5.4         3.9          1.7         0.4  setosa 

要獲取一個簡單的隨機樣本,下面的代碼可以正常處理2行樣本。

iris[sample(nrow(iris), 2), ]

但是我不確定如何調節Species字段。 例如,如上所示如何采取隨機樣本,但僅限於Species != “setosa”

iris$Species有三種類別

> summary(iris$Species)
    setosa versicolor  virginica 
        50         50         50

我不確定如何正確嵌套條件。 我之前的一個嘗試是在下面,其中包括明顯不正確的結果......

> iris[sample(nrow(iris)[iris$Species != "setosa"], 2), ]
     Sepal.Length Sepal.Width Petal.Length Petal.Width Species
NA             NA          NA           NA          NA    <NA>
NA.1           NA          NA           NA          NA    <NA>

謝謝

我會使用which來獲取行數的向量,從中可以根據您的條件進行sample ....

iris[ sample( which( iris$Species != "setosa" ) , 2 ) , ]
#    Sepal.Length Sepal.Width Petal.Length Petal.Width    Species
#59           6.6         2.9          4.6         1.3 versicolor
#133          6.4         2.8          5.6         2.2  virginica

使用dplyr:

library(dplyr)
set.seed(12)
filter(iris, Species != "setosa") %>% sample_n(., 2) 

輸出:

   Sepal.Length Sepal.Width Petal.Length Petal.Width    Species
7           6.3         3.3          4.7         1.6 versicolor
81          7.4         2.8          6.1         1.9  virginica

不在一條線上做得更干凈,但是

iris[iris$Species != "setosa",][sample(nrow(iris[iris$Species != "setosa",]), 2), ]

干凈簡單的數據表方法:

require(data.table)
iris <- data.table(iris)
cond <- iris[Species!= 'setosa', which = T]
iris[sample(cond, 2)]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM