我是靠谱客的博主 机灵发带,最近开发中收集的这篇文章主要介绍在数据框中采样随机行,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

本文翻译自: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() or dplyr::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”获得随机采样的值。

最后

以上就是机灵发带为你收集整理的在数据框中采样随机行的全部内容,希望文章能够帮你解决在数据框中采样随机行所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(65)

评论列表共有 0 条评论

立即
投稿
返回
顶部