R 根据因子洗牌数据帧行
我有一个数据框,例如:R 根据因子洗牌数据帧行,r,dplyr,R,Dplyr,我有一个数据框,例如: 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 class value A 0
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 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%>%groupby(class)%>%sample(size=3)
但是这个示例每个组有3行,我没有相同数量的值
目前我找到的唯一解决方案是为每个类创建
n
数据帧,并独立地洗牌每个数据帧。但是由于我的类号很大,它可能太长太脏。我们可以对行序列(row_number()
)使用sample
,并根据采样的索引重新排列“值”
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/fsummerse/filter/arrange
等,但它不能与sample\n
Trydf1%>%groupby(class)%>%mutate(value=value[sample]一起工作(row_number())]
@RonakShah在预期输出中不是55
是的,但是当sample
中只有一个数字时,它就像sample(1:55,1)
好的,我在注释中检查了我以前的解决方案。谢谢