我正在努力寻找合适的函数,将返回指定数量的行随机拾取,没有从R语言的数据帧替换?有人能帮帮我吗?
当前回答
数据。表包提供了函数DT[sample(。N, M)],从数据表DT中随机抽取M行。
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
其他回答
在R中从tibble类型中选择一个随机样本:
library("tibble")
a <- your_tibble[sample(1:nrow(your_tibble), 150),]
Nrow接受一个tibble并返回行数。传递给sample的第一个参数是一个从1到tibble末尾的范围。传递给sample的第二个参数是150,表示需要多少随机抽样。方括号切片指定返回索引的行。变量“a”获取随机抽样的值。
我是R的新手,但我用的是这个简单的方法:
sample_of_diamonds <- diamonds[sample(nrow(diamonds),100),]
PS:如果它有一些我没有想到的缺点,请注意。
首先制作一些数据:
> 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
然后随机选择一些行:
> df[sample(nrow(df), 3), ]
X1 X2
9 -0.3983045 0.7157506
2 -1.1334614 -0.1973846
10 -0.9060305 2.3234110
2021年在潮流宇宙中这样做的方式是:
library(tidyverse)
df = data.frame(
A = letters[1:10],
B = 1:10
)
df
#> A B
#> 1 a 1
#> 2 b 2
#> 3 c 3
#> 4 d 4
#> 5 e 5
#> 6 f 6
#> 7 g 7
#> 8 h 8
#> 9 i 9
#> 10 j 10
df %>% sample_n(5)
#> A B
#> 1 e 5
#> 2 g 7
#> 3 h 8
#> 4 b 2
#> 5 j 10
df %>% sample_frac(0.5)
#> A B
#> 1 i 9
#> 2 g 7
#> 3 j 10
#> 4 c 3
#> 5 b 2
由reprex包在2021-10-05创建(v2.0.0.9000)
写一个!从JC的回答可以看出:
randomRows = function(df,n){
return(df[sample(nrow(df),n),])
}
现在,通过首先检查n是否<=nrow(df)并在出现错误时停止,使其更好。