相关疑难解决方法(0)

dplyr sample_n其中n是分组变量的值

我有以下分组数据框,我想使用该函数dplyr::sample_n从每个组的数据框中提取行.我想使用NDG每个组中的分组变量的值作为从每个组中提取的行数.

> dg.tmp <- structure(list(Gene = c("CAMK1", "GHRL", "TIMP4", "CAMK1", "GHRL", 
"TIMP4", "ARL8B", "ARPC4", "SEC13", "ARL8B", "ARPC4", "SEC13"
), GLB = c(3, 3, 3, 3, 3, 3, 10, 10, 10, 10, 10, 10), NDG = c(1, 
1, 1, 2, 2, 2, 1, 1, 1, 2, 2, 2)), class = c("tbl_df", "tbl", 
"data.frame"), row.names = c(NA, -12L), .Names = c("Gene", "GLB", 
"NDG"))

> dg <- dg.tmp %>% 
     dplyr::group_by(GLB,NDG)

> dg
Source: local data frame [12 x 3] …
Run Code Online (Sandbox Code Playgroud)

r dplyr

6
推荐指数
1
解决办法
1645
查看次数

R(和 dplyr?) - 按组从数据帧中采样,最大样本大小为 n

我有一个数据框,其中每组包含多个样本(1-n)。我想对这个数据集进行采样,而不进行替换,以便每组最多有 5 个样本 (1-5)。

此问题之前已在此处进行过描述和解答。在这个问题中,@evolvedmicrobe的答案对我来说是最满意的,并且在过去一直有效。这种情况似乎在去年左右就被打破了。

这是我想做的一个可行的例子:

从 mtcars 中,按“cyl”分组时有不同数量的行。

table(mtcars$cyl)
 4  6  8 
11  7 14 
Run Code Online (Sandbox Code Playgroud)

我想创建一个子样本,其中每组气缸的最大汽车数量为 10 辆。理论上,生成的行数如下所示:

table(subsample$cyl)
 4  6  8
10  7 10
Run Code Online (Sandbox Code Playgroud)

我对此的天真尝试是:

library(dplyr)
subsample <- mtcars %>% group_by(cyl) %>% sample_n(10) %>% ungroup()
Run Code Online (Sandbox Code Playgroud)

但是,因为一组的行数少于 10:

错误:size必须小于或等于 7(数据大小),设置replace= TRUE 以使用带替换的采样

@evolvedmicrobe对此的回答是创建一个自定义采样函数:

### Custom sampler function to sample min(data, sample) which can't be done with dplyr
 ### it's a modified copy of sample_n.grouped_df
 sample_vals <- function (tbl, size, replace …
Run Code Online (Sandbox Code Playgroud)

r subsampling dplyr

5
推荐指数
2
解决办法
2515
查看次数

标签 统计

dplyr ×2

r ×2

subsampling ×1