如何根据 R 中另一列的权重重新缩放一列?
how to rescale a column based on weight of another column in R?
我有一个包含 col1(Counts) 和 col2(Date) 的数据框
df<-data.frame(col1=c(1,2,3,4,16,0),col2=c('10-12-2019','11-12-2019','13-01-2020','14-02-2020','01-03-2020','01-04-2020'))
我想基于 col1 为唯一日期创建另一个列范围 (0-100),但是当我这样做时它会给我随机数而不是考虑 col1
的权重
df$col3<-runif(df$col1,min=0,max=100)
怎么做?
这个行得通吗,col1 中每增加一个单位,它就会线性地不断变化。
library(dplyr)
df %>% mutate(col3 = col1 * (100/max(col1)))
col1 col2 col3
1 1 10-12-2019 6.25
2 2 11-12-2019 12.50
3 3 13-01-2020 18.75
4 4 14-02-2020 25.00
5 16 01-03-2020 100.00
6 0 01-04-2020 0.00
也许您正在尝试在 0-1 之间缩放数字。你可以试试这个功能。
scale_0_to_1 <- function(x) (x-min(x, na.rm = TRUE))/
(max(x, na.rm = TRUE)-min(x, na.rm = TRUE))
df$col3 <- scale_0_to_1(df$col1)
df
# col1 col2 col3
#1 1 10-12-2019 0.0625
#2 2 11-12-2019 0.1250
#3 3 13-01-2020 0.1875
#4 4 14-02-2020 0.2500
#5 16 01-03-2020 1.0000
#6 0 01-04-2020 0.0000
另一种方法是使用 scales
包中的 rescale
函数:
scales::rescale(df$col1) -> df$col3
# c ol1 col2 col3
# 1 1 10-12-2019 0.0625
# 2 2 11-12-2019 0.1250
# 3 3 13-01-2020 0.1875
# 4 4 14-02-2020 0.2500
# 5 16 01-03-2020 1.0000
# 6 0 01-04-2020 0.0000
我们可以用 range
创建函数
scale_0_to_1 <- function(x) (x- min(x))/diff(range(x))
df$col3 <- scale_0_to_1(df$col1)
df$col3
#[1] 0.0625 0.1250 0.1875 0.2500 1.0000 0.0000
我有一个包含 col1(Counts) 和 col2(Date) 的数据框
df<-data.frame(col1=c(1,2,3,4,16,0),col2=c('10-12-2019','11-12-2019','13-01-2020','14-02-2020','01-03-2020','01-04-2020'))
我想基于 col1 为唯一日期创建另一个列范围 (0-100),但是当我这样做时它会给我随机数而不是考虑 col1
的权重df$col3<-runif(df$col1,min=0,max=100)
怎么做?
这个行得通吗,col1 中每增加一个单位,它就会线性地不断变化。
library(dplyr)
df %>% mutate(col3 = col1 * (100/max(col1)))
col1 col2 col3
1 1 10-12-2019 6.25
2 2 11-12-2019 12.50
3 3 13-01-2020 18.75
4 4 14-02-2020 25.00
5 16 01-03-2020 100.00
6 0 01-04-2020 0.00
也许您正在尝试在 0-1 之间缩放数字。你可以试试这个功能。
scale_0_to_1 <- function(x) (x-min(x, na.rm = TRUE))/
(max(x, na.rm = TRUE)-min(x, na.rm = TRUE))
df$col3 <- scale_0_to_1(df$col1)
df
# col1 col2 col3
#1 1 10-12-2019 0.0625
#2 2 11-12-2019 0.1250
#3 3 13-01-2020 0.1875
#4 4 14-02-2020 0.2500
#5 16 01-03-2020 1.0000
#6 0 01-04-2020 0.0000
另一种方法是使用 scales
包中的 rescale
函数:
scales::rescale(df$col1) -> df$col3
# c ol1 col2 col3
# 1 1 10-12-2019 0.0625
# 2 2 11-12-2019 0.1250
# 3 3 13-01-2020 0.1875
# 4 4 14-02-2020 0.2500
# 5 16 01-03-2020 1.0000
# 6 0 01-04-2020 0.0000
我们可以用 range
scale_0_to_1 <- function(x) (x- min(x))/diff(range(x))
df$col3 <- scale_0_to_1(df$col1)
df$col3
#[1] 0.0625 0.1250 0.1875 0.2500 1.0000 0.0000