我试图学习如何规范化R中数据集/框架中给定列中的值,并在新创建的列中输入这些规范化值。
我能够找到两个代码 - 一个帮助我规范化值的代码,另一个代码帮助我创建了一个列。
但是,我无法做的是在新创建的列中输入规范化值。
我正在玩数据集Indometh(内置于R中)。我想创建一个ConcNorm列,它将具有Indometh中已存在的Conc列的标准化值(介于0和1之间)。
有人可以帮我解决这个问题吗?
Indometh["Concnorm"] <- NA
normalize <- function(Indometh) {
Indometh <- sweep(Indometh, 2, apply(Indometh, 2, min))
sweep(Indometh, 2, apply(Indometh, 2, max), "/")
}
UPDATE:myNorm = function (x) {(x- min(Indometh$conc)) / (max(Indometh$conc)-min(Indometh$conc))}
MyNorm(0.05)
myNorm(2.7)
我提出的另一个代码看起来像:
以上是我在网上进行研究,但这不起作用/服务于此目的。
感谢所有帮助。
答案 0 :(得分:0)
此函数接收data.frame对象以及原始列和新列的名称:
normalize.col = function(data, orig.col, new.col) {
val.range = range(data[, orig.col])
data[, new.col] = (data[, orig.col] - val.range[1])/(val.range[2] - val.range[1])
data
}
示例(您也可以传递多个列):
Indometh_norm = normalize.col(Indometh, 'conc', 'normConc')
答案 1 :(得分:0)
我错过了什么吗?
df <- Indometh
df$scaledConc <- with(df, (conc - min(conc))/diff(range(conc)))
range(df$scaledConc)
# [1] 0 1
通常,混淆内置数据集是个坏主意。这就是我首先复制到df
。