将变量的值替换为R中出现频率最高的值

zdwk9cvp  于 2023-03-15  发布在  其他
关注(0)|答案(2)|浏览(119)

我似乎找不到这个问题的例子:
我想用新变量(V2)的每个ID中出现频率最高的值替换分类变量(V1)的值。如果V1中没有出现频率最高的值,我想用最高的值替换。
下面是我的数据示例:

my_data <- data.frame(ID = c("2", "2", "2", "2" ,"4", "4", "4", "4"),
                      V1 = c("2", "1", "2", "1", "3", "1", "4", "3"))

这是我希望它看起来像:

任何帮助都非常感谢!!

cgyqldqp

cgyqldqp1#

一种方法是先按nV1的频率排序,然后对每个ID,先取n,再取V1,最后连接回原始数据(例如,我用两个额外的行修改了数据,其中给定的ID没有最大值)。

library(dplyr) # v1.1.0

my_data %>%
  count(ID, V1) %>%
  arrange(ID, desc(n), desc(V1)) %>%
  slice(1, .by = ID) %>%
  rename(V2 = V1) %>%
  right_join(my_data, multiple = "all") %>%
  select(ID, V1, V2)

产出

ID V1 V2
1   2  2  2
2   2  1  2
3   2  2  2
4   2  1  2
5   4  3  3
6   4  1  3
7   4  4  3
8   4  3  3
9   5  6  7
10  5  7  7
2nc8po8w

2nc8po8w2#

更新(添加max()并删除[1]):

我们可以这样做:使用add_count

library(dplyr)

df %>% 
  group_by(ID) %>% 
  add_count(V1) %>% 
  mutate(V2 = max(V1[n==max(n)])) %>% 
  ungroup() %>% 
  select(-n)
ID    V1    V2   
  <chr> <chr> <chr>
1 2     2     2    
2 2     1     2    
3 2     2     2    
4 2     1     2    
5 4     3     3    
6 4     1     3    
7 4     4     3    
8 4     3     3

相关问题