首页 > 解决方案 > 我需要在一组列中找到最大值,然后将每个单独的记录除以该值。有什么帮助吗?使用聚合?

问题描述

使用 R 我有一个包含许多列和数百万行的数据框。对于一组特定的列,我需要找到该组列的最大值,并将每条记录除以该最大值减去 0.00001,因为结果必须在 0-1 之间。

在下面的示例中,第一个表是一个数据示例,其中会发现最大值为 96。然后将每个值除以 96+0.0001 并添加为新变量。

任何帮助都是极好的!

在此处输入图像描述

标签: r

解决方案


让我们将此作为输入:

df <- data.frame(PIN = c('a','b','c','d'),
                 v1 = c(79,6,96,56),
                 v2 = c(77,22,2,16),
                 v3 = c(57,96,10,80))

  PIN v1 v2 v3
1   a 79 77 57
2   b  6 22 96
3   c 96  2 10
4   d 56 16 80

然后使用dplyr

df %>% 
  mutate(across(c(-1), ~.x / max(df[,2:4]) - 0.00001)) %>% 
  mutate(across(c(-1), round, digits = 5))

输出:

  PIN      v1      v2      v3
1   a 0.82291 0.80207 0.59374
2   b 0.06249 0.22916 0.99999
3   c 0.99999 0.02082 0.10416
4   d 0.58332 0.16666 0.83332

最大值位于( ) 的列2中。您可以将索引替换为要检查最大值的索引4max(df[,2:4])

编辑:当你有 0 时:

df <- data.frame(PIN = c('a','b','c','d'),
                 v1 = c(79,6,96,56),
                 v2 = c(77,22,2,16),
                 v3 = c(57,96,10,0))

  PIN v1 v2 v3
1   a 79 77 57
2   b  6 22 96
3   c 96  2 10
4   d 56 16  0

df %>% 
  mutate(across(c(-1), ~.x / max(df[,2:4]) - 0.00001)) %>% 
  mutate(across(c(-1), round, digits = 5)) %>% 
  mutate(across(c(-1), ~ifelse(.x<0,0,.x)))


  PIN      v1      v2      v3
1   a 0.82291 0.80207 0.59374
2   b 0.06249 0.22916 0.99999
3   c 0.99999 0.02082 0.10416
4   d 0.58332 0.16666 0.00000

推荐阅读