gpt4 book ai didi

r - 根据一个因素对数据帧行进行混洗

转载 作者:行者123 更新时间:2023-12-04 11:37:41 26 4
gpt4 key购买 nike

我有一个数据框,例如:

letter class value
A 0 55
B 1 23
C 1 12
D 1 9
E 2 68
F 2 78
G 2 187

我想随机重新采样每个类中的行以关联 letter到一个新的随机 value (但来自同一类(class))。

所需的示例输出:
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每个类的数据帧,并独立地对每个数据帧进行混洗。但由于我的类(class)人数较多,可能会太长太脏。

最佳答案

我们可以使用 sample在行序列( row_number() )上并根据采样索引重新排列“值”

df1 %>% 
group_by(class) %>%
mutate(value = value[sample(row_number())])

或者如评论中提到的@RonakShah,如果我们只有一行,则使用 sample会触发 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等等,但它没有实现与 sample_n 一起工作

关于r - 根据一个因素对数据帧行进行混洗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54255335/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com