如何根据R中另一列的权重重新缩放列?

如何根据R中另一列的权重重新缩放列?,r,dataframe,rescale,R,Dataframe,Rescale,我有一个数据帧,其中包括col1(计数)和col2(日期) df做这项工作,对于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.

我有一个数据帧,其中包括col1(计数)和col2(日期)


df做这项工作,对于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

这是有效的,这是一个恒定的变化,在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

scale_0_to_1可能您正在尝试将数字缩放到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

scale_0_至_1另一种选择是使用
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

另一种方法是使用
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

scale\u 0\u to\u 1我们可以创建范围为
的函数

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

scale\u 0\u to\u 1不清楚您的要求,如果col1应该是重量,runif的“n”值应该是多少?你能分享你的预期输出吗?嗨,Karthik,我用过runif,但不管col1的大小,它都会生成随机数。我希望如果col1=16,它应该是100,col1=0,那么它应该是0。不清楚你的要求,如果col1应该是权重,那么runif的“n”值应该是多少?你能分享一下你的预期结果吗?嗨,Karthik,我用过runif,但是不管col1的大小,它都会生成随机数。我希望如果col1=16,它应该是100,col1=0,那么它应该是0。