【问题标题】:how to rescale a column based on weight of another column in R?如何根据 R 中另一列的权重重新调整列?
【发布时间】:2020-11-22 12:50:32
【问题描述】:

我有一个数据框,其中包括 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 应该是权重,runif 的 'n' 值应该是多少?你能分享你的预期输出吗?
  • 嗨 Karthik,我使用了 runif,但无论 col1 的大小如何,它都会生成随机数。我预计如果 col1=16 它应该是 100,col1=0 那么它应该是 0。跨度>

标签: r dataframe rescale


【解决方案1】:

这行得通吗,这对 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

【讨论】:

    【解决方案2】:

    也许您正在尝试在 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
    

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

        我们可以用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
        

        【讨论】:

          猜你喜欢
          • 2017-06-17
          • 1970-01-01
          • 2016-02-23
          • 1970-01-01
          • 2020-12-30
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多