首页 > 解决方案 > 每组随机

问题描述

我正在尝试使用 R 随机化数据框中的数字向量。我的数据看起来像这样:

user click  
1025     0        
1025     1        
1025     0        
1025     0        
1025     0        
1025     0        
1025     1        
1025     0        
1025     0        
1025     0        
1025     0        
14639    1        
14639    0  
14639    0
14639    1      
11605    0        
11605    0        
14605    1        

在数据中,一些用户出现的频率高于其他用户。我现在想更改每个用户 ID。假设有 100 个唯一用户 ID。最后,我想拥有 100 个不同的唯一用户 ID。

我试过dplyr:

data %>% group_by(user) %>% mutate(anon = rep(sample(length(unique(data$user)), 1, replace = F)), n())

但是,这不起作用,因为采样是为每个用户单独进行的;忽略其他用户。结果,一些用户最终拥有相同的新用户 ID。

有人可以告诉我如何 - 随机 - 为数据框中的每个人创建一个新的用户 ID(不重复)吗?

标签: rdplyr

解决方案


我将通过首先生成一些用户 ID 来解决这个问题,然后创建一个将现有用户 ID 与新用户 ID 相关联的临时 tibble,然后将您以前的数据与此表连接起来:

# Randomly generate some user IDs
new_user_ids = shuffle(seq(1, length(unique(df$user))))

# Join
data %>%
  left_join(tibble(user = unique(df$user), new.user = new_user_ids)) %>%
  mutate(user = new.user) %>% select(-new.user)

这给出了以下结果,例如:

    user click
   <int> <dbl>
 1     3     0
 2     3     1
 3     3     0
 4     3     0
 5     3     0
 6     3     0
 7     3     1
 8     3     0
 9     3     0
10     3     0
11     3     0
12     2     1
13     2     0
14     2     0
15     2     1
16     4     0
17     4     0
18     1     1

推荐阅读