这个问题来自这里发现的SO帖子 ,并使用从R-help邮件列表上的帖子修改的代码,这里可以看到
我试图在数据框中提取行的随机样本,但条件.使用iris看起来像这样的R 数据:
> 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
Run Code Online (Sandbox Code Playgroud)
要获取一个简单的随机样本,下面的代码可以正常处理2行样本.
iris[sample(nrow(iris), 2), ]
Run Code Online (Sandbox Code Playgroud)
但是我不确定如何调节Species字段.例如,如何采用如上所述的随机样本,但仅限于Species != “setosa”
有三类 iris$Species
> summary(iris$Species)
setosa versicolor virginica
50 50 50
Run Code Online (Sandbox Code Playgroud)
我不确定如何正确嵌套条件.我之前的一个尝试是在下面,其中包括明显不正确的结果......
> 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>
Run Code Online (Sandbox Code Playgroud)
谢谢
Sim*_*lon 18
我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
Run Code Online (Sandbox Code Playgroud)
mpa*_*nco 10
使用dplyr:
library(dplyr)
set.seed(12)
filter(iris, Species != "setosa") %>% sample_n(., 2)
Run Code Online (Sandbox Code Playgroud)
输出:
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
Run Code Online (Sandbox Code Playgroud)