【问题标题】:rescale the selective range into 0 - 1?将选择范围重新调整为 0 - 1?
【发布时间】:2021-09-01 16:58:55
【问题描述】:

我有一个这样的数据框:

df <- data.frame(FC=c(1, 2, 4, 2, 1, -4, -2))

我正在尝试重新调整 0-1 之间的正值和 0--1 之间的负值,因此输出将是:

 FC
0.25
 0.5
   1
 0.5
0.25
  -1
-0.5

我在 r 中尝试过 "scales" 包

df$FC <- rescale(df$FC, to = c(0, 1))

但它正在重新调整 0-1 之间的所有值。

如何按各个范围对列进行规范化?

非常感谢您提供的任何帮助。

【问题讨论】:

  • 你需要range(df$FC)
  • 确定它是否可以提供所需的输出。谢谢兄弟。
  • 但是,尽管rescale(df$FC, to = range(df$FC))rescale(df$FC, to = range(abs(df$FC))) 没有提供您预期的输出
  • 我认为from 已经在执行range,如果我们将to 指定为范围,它会返回输入本身
  • 基本上分别在正数和负数上运行 stackoverflow.com/questions/5468280/…

标签: r tidyverse scale normalization rescale


【解决方案1】:

我们也可以使用sign 与@ThomasIsCoding 帖子中类似的逻辑

df$FC_scaled <- with(df, FC/setNames(range(FC),
           c(-1, 1))[as.character(sign(FC))] * sign(FC))

-输出

 df
  FC FC_scaled
1  1      0.25
2  2      0.50
3  4      1.00
4  2      0.50
5  1      0.25
6 -4     -1.00
7 -2     -0.50

【讨论】:

    【解决方案2】:

    这是一个基本的 R 选项

    transform(
        df,
        FC_scaled = FC / abs(ifelse(FC > 0, max(FC), min(FC)))
    )
    

    给了

      FC FC_scaled
    1  1      0.25
    2  2      0.50
    3  4      1.00
    4  2      0.50
    5  1      0.25
    6 -4     -1.00
    7 -2     -0.50
    

    【讨论】:

    • 哇,非常需要,它正在按要求工作。谢谢你的帮助。祝你有美好的一天。
    【解决方案3】:

    您可以将数据分成正面和负面并单独处理。

    df <- data.frame(FC=c(1, 2, 4, 2, 1, -4, -2))
    
    library(scales)
    
    df[which(df$FC>0),] <- rescale(df[which(df$FC>0),], to=c(.25,1))
    df[which(df$FC<0),] <- rescale(df[which(df$FC<0),], to=c(-.5,-1))
    
    df
    

    输出:

         FC
    1  0.25
    2  0.50
    3  1.00
    4  0.50
    5  0.25
    6 -0.50
    7 -1.00
    
    

    但是请注意,我没有指定介于 0 和 1 之间的范围,因为这不会为您提供所需的输出。如果我这样做了,输出将是这样的:

              FC
    1  0.0000000
    2  0.3333333
    3  1.0000000
    4  0.3333333
    5  0.0000000
    6  0.0000000
    7 -1.0000000
    
    

    【讨论】:

    • 我会检查并回复您。感谢您的帮助。
    猜你喜欢
    • 1970-01-01
    • 2021-09-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多