r - 根据一个因素随机播放数据帧行
问题描述
我有一个数据框,例如:
letter class value
A 0 55
B 1 23
C 1 12
D 1 9
E 2 68
F 2 78
G 2 187
我想对每个类中的行进行随机重新采样,以将 a 关联letter
到一个新的随机数value
(但来自同一个类)。
所需的示例输出:
letter class value
A 0 55
B 1 12
C 1 9
D 1 23
E 2 187
F 2 78
G 2 68
我尝试了dplyr
类似的东西:
tab %>% group_by(class) %>% sample_n(size=3)
但是这个样本每组 3 行,我没有每组相同数量的值。
我目前找到的唯一解决方案是n
为每个类创建数据帧,并独立地打乱每个数据帧。但由于我的班级人数很大,可能会太长太脏。
解决方案
我们可以sample
在行序列上使用 ( row_number()
) 并根据采样索引重新排列“值”
df1 %>%
group_by(class) %>%
mutate(value = value[sample(row_number())])
或者正如评论中提到的@RonakShah,如果我们只有一行,那么 usingsample
将触发sample
值序列。所以,如果我们直接sample
在“值”上使用,那么if/else
可以使用条件
df1 %>%
group_by(class) %>%
mutate(value = if(n() == 1) value else sample(value, n()))
如果我们想使用sample_n
,可以在里面完成do
df1 %>%
group_by(class) %>%
do(sample_n(., size = nrow(.)))
注意:我们需要指定nrow
而不是n()
一些 tidyverse 特定功能在某些功能(例如mutate/fsummarise/filter/arrange
etc)中工作,但它没有实现与一起工作sample_n
推荐阅读
- jquery - 通过 AJAX 请求访问 SharePoint-API 时如何解决 CORS 问题?
- java - 对象映射到具有休眠问题的数据库
- r - mailR:向服务器发送电子邮件失败
- javascript - 元素内容更改的问题 - 我如何获得新值?
- r - 来自 MASS R 库的加长 kde2d
- visual-studio-code - cordova run android 采用“错误”的数据库
- angular - 如何以角度在 PDF 查看器中添加注释和注释
- swift - SwiftyGif Remote Gif 正在运行但不会显示
- python - 如何使用列表推导在 Pandas 中执行条件列操作?
- android - 无法使用下载管理器下载文件