繁体   English   中英

如何对共享另一列中给出的相同ID的所有行在数据框中标准化列值?

[英]How can I normalize column values in a data frame for all rows that share the same ID given in another column?

我有一个看起来像这样的数据框

ID  value
1   0.5
1   0.6
1   0.7
2   0.5
2   0.5
2   0.5

并且我想为具有相同ID的值添加一个标准化的列,如下所示:norm = value / max(具有相同ID的值)

ID  value norm
1   0.5   0.5/0.7
1   0.6   0.6/0.7
1   0.7    1
2   0.5    1
2   0.3   0.3/0.5
2   0.5    1

是否有一种简单的方法可以在R中执行此操作而无需先排序然后循环? 干杯

使用基本R工具的解决方案:

data$norm <- with(data, value / ave(value, ID, FUN = max))

函数ave非常有用,您可能需要阅读?ave

# Create an example data frame
dt <- read.csv(text = "ID, value
1, 0.5
1, 0.6
1, 0.7
2, 0.5
2, 0.5
               2, 0.5")

# Load package
library(tidyverse)

# Create a new data frame with a column showing normalization
dt2 <- dt %>%
  # Group the ID, make sure the following command works only in each group
  group_by(ID) %>%
  # Create the new column norm 
  # norm equals each value divided by the maximum value of each ID group
  mutate(norm = value/max(value))

我们可以使用data.table

library(data.table)
setDT(dt)[, norm := value/max(value), ID]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM