概述
本文翻译自:Sample random rows in dataframe
I am struggling to find the appropriate function that would return a specified number of rows picked up randomly without replacement from a data frame in R language? 我正在努力寻找合适的函数,该函数将返回指定数量的行,这些行将随机抽取而不用R语言的数据帧替换? Can anyone help me out? 谁能帮我吗?
#1楼
参考:https://stackoom.com/question/YiGX/在数据框中采样随机行
#2楼
EDIT : This answer is now outdated, see the updated version . 编辑 :此答案现在已过时,请参阅更新的版本 。
In my R package I have enhanced sample
so that it now behaves as expected also for data frames: 在我的R包中,我增强了sample
以便它现在对于数据帧也表现出预期的效果:
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
This is achieved by making sample
an S3 generic method and providing the necessary (trivial) functionality in a function. 这实现了通过使sample
的S3通用方法,并提供在功能必要的(简单)的功能。 A call to setMethod
fixes everything. 调用setMethod
可修复所有问题。 The original implementation still can be accessed through base::sample
. 仍然可以通过base::sample
访问原始实现。
#3楼
Outdated answer. 过时的答案。 Please use
dplyr::sample_frac()
ordplyr::sample_n()
instead. 请改用dplyr::sample_frac()
或dplyr::sample_n()
。
In my R package there is a function sample.rows
just for this purpose: 在我的R包中,有一个函数sample.rows
仅用于此目的:
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
Enhancing sample
by making it a generic S3 function was a bad idea, according to comments by Joris Meys to a previous answer . 根据Joris Meys对先前答案的评论,通过使其成为通用S3函数来增强sample
是一个坏主意。
#4楼
The answer John Colby gives is the right answer. John Colby给出的答案是正确的答案。 However if you are a dplyr
user there is also the answer sample_n
: 但是,如果您是dplyr
用户,那么还会有答案sample_n
:
sample_n(df, 10)
randomly samples 10 rows from the dataframe. 从数据框中随机采样10行。 It calls sample.int
, so really is the same answer with less typing (and simplifies use in the context of magrittr since the dataframe is the first argument). 它调用了sample.int
,所以键入更少的问题也是相同的答案(并且由于数据帧是第一个参数,因此简化了magrittr的使用)。
#5楼
The data.table
package provides the function DT[sample(.N, M)]
, sampling M random rows from the data table DT
. data.table
包提供函数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
#6楼
Select a Random sample from a tibble type in R: 从R中的小标题类型中选择一个随机样本:
library("tibble")
a <- your_tibble[sample(1:nrow(your_tibble), 150),]
nrow takes a tibble and returns the number of rows. nrow进行小标题并返回行数。 The first parameter passed to sample
is a range from 1 to the end of your tibble. 传递给sample
的第一个参数的范围是从1到小标题的结尾。 The second parameter passed to sample, 150, is how many random samplings you want. 传递给样本的第二个参数150是所需的随机抽样数。 The square bracket slicing specifies the rows of the indices returned. 方括号切片指定返回索引的行。 Variable 'a' gets the value of the random sampling. 变量“ a”获得随机采样的值。
最后
以上就是机灵发带为你收集整理的在数据框中采样随机行的全部内容,希望文章能够帮你解决在数据框中采样随机行所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复