r - 我需要在一组列中找到最大值,然后将每个单独的记录除以该值。有什么帮助吗?使用聚合?
问题描述
使用 R 我有一个包含许多列和数百万行的数据框。对于一组特定的列,我需要找到该组列的最大值,并将每条记录除以该最大值减去 0.00001,因为结果必须在 0-1 之间。
在下面的示例中,第一个表是一个数据示例,其中会发现最大值为 96。然后将每个值除以 96+0.0001 并添加为新变量。
任何帮助都是极好的!
解决方案
让我们将此作为输入:
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
中。您可以将索引替换为要检查最大值的索引4
max(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
推荐阅读
- bash - 空值重击
- aws-amplify - 我正在尝试放大推送但是出现超时错误可能是什么问题?
- c# - 聚焦材质菜单WPF中的第一项
- python - 使用 TimeDistributed 层在 Keras 中构建有状态 RNN 时出错
- facebook - 如何在 React 站点中为 Facebook Pixel 的表单手动添加自动高级匹配?
- css - 使用 SASS 向线性渐变添加不同的颜色
- javascript - 根据鼠标位置暂停和恢复 SetInterval
- r - 通过 geom_smooth 添加回归线,在一张图中有和没有颜色分组
- ruby-on-rails - 使用 Sidekiq 的 RSpec 邮件测试发送空 [] 错误
- java - 如何将 SearchView 查询添加到 FirestoreRecyclerOptions?