R在类别变量内的随机抽样

问题描述 投票:0回答:1

假设我有一个数据框,其中包含n个类别的分类变量和一个数字变量。我需要将每个类别中的数字变量随机化。例如,考虑下表:

Col_1 Col_2A2A 5A 4A 8B 1B 4B 9B 7

当我在R中尝试sample()函数时,它考虑了两个类别都抛出了结果。有什么函数可以得到这种输出? (有无替换都无所谓)

Col_1 Col_2A 8A 4A2A 5B 9B 7B 4B 1

r permutation sampling
1个回答
0
投票

这里是dplyr解决方案:

library(dplyr)
set.seed(2)
dat %>%
  group_by(Col_1) %>%
  mutate(Col_2 = sample(Col_2)) %>%
  ungroup()
# # A tibble: 8 x 2
#   Col_1 Col_2
#   <chr> <int>
# 1 A         2
# 2 A         4
# 3 A         5
# 4 A         8
# 5 B         7
# 6 B         9
# 7 B         1
# 8 B         4

data.table方法:

library(data.table)
datDT <- as.data.table(dat)
set.seed(2)
datDT[, Col_2 := sample(Col_2), by = "Col_1"]
datDT
#    Col_1 Col_2
# 1:     A     2
# 2:     A     4
# 3:     A     5
# 4:     A     8
# 5:     B     7
# 6:     B     9
# 7:     B     1
# 8:     B     4

数据

dat <- read.table(header = TRUE, stringsAsFactors = FALSE, text = "
Col_1 Col_2
A 2
A 5
A 4
A 8
B 1
B 4
B 9
B 7")

0
投票

您可以在组内sample行号

df[with(df, ave(seq_len(nrow(df)), Col_1, FUN = sample)), ]

#  Col_1 Col_2
#2     A     5
#4     A     8
#1     A     2
#3     A     4
#7     B     9
#5     B     1
#8     B     7
#6     B     4
© www.soinside.com 2019 - 2024. All rights reserved.