将选择范围重新调整为 0 - 1?
rescale the selective range into 0 - 1?
我有一个这样的数据框:
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 之间的所有值。
如何根据各自的范围对列进行标准化?
非常感谢您提供的任何帮助。
您可以将数据分成正负两部分,然后分别处理。
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
这是一个基本的 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
我们也可以使用具有与@ThomasIsCoding post
类似逻辑的sign
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
我有一个这样的数据框:
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 之间的所有值。
如何根据各自的范围对列进行标准化?
非常感谢您提供的任何帮助。
您可以将数据分成正负两部分,然后分别处理。
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
这是一个基本的 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
我们也可以使用具有与@ThomasIsCoding post
类似逻辑的sign
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