我有一个像下面这样的数据集,我想按列对其进行归一化(0 到 1)。
我目前拥有的:
2015 Value 2014 Value 2013 Value
China 500 400 450
Germany 890 760 700
Italy 240 210 200
如果有什么结果会很棒:
2015 Value 2015 Normed 2014 Value 2014 Normed 2013 Value 2013 Normed
China 500 0.5 400 0.5 450 0.5
Germany 890 1.0 760 1.0 700 1.0
Italy 240 0.0 210 0.0 200 0.0
在这一步之后,我想对“总平均值”中的每个 Normed 列进行平均。
我已经尝试了一些方法,但我没有看到如何按列应用函数,每个输出都有一个新列。 lapply 函数似乎是正确的轨道,但我不确定如何最好地使用它。 (我是 R 的新手,正在努力学习。)
非常感谢您的帮助。很抱歉回答基本问题!
最佳答案
我们可以使用 lapply
遍历列,进行归一化,cbind
与原始数据集列交替使用 Map
然后 cbind
list
元素到 data.frame
lst <- lapply(df[-1], function(x) round((x-min(x))/(max(x)-min(x)), 1))
res <- cbind(df[1], do.call(cbind.data.frame, Map(cbind , df[-1], lst)))
names(res)[-1] <- rbind(names(df)[-1], sub("Value", "Norm", names(df)[-1]))
res
# Country 2015 Value 2015 Norm 2014 Value 2014 Norm 2013 Value 2013 Norm
#1 China 500 0.4 400 0.3 450 0.5
#2 Germany 890 1.0 760 1.0 700 1.0
#3 Italy 240 0.0 210 0.0 200 0.0
数据
df <- structure(list(Country = c("China", "Germany", "Italy"), `2015 Value` = c(500L,
890L, 240L), `2014 Value` = c(400L, 760L, 210L), `2013 Value` = c(450L,
700L, 200L)), .Names = c("Country", "2015 Value", "2014 Value",
"2013 Value"), class = "data.frame", row.names = c(NA, -3L))
关于r - 如何按列最好地规范化 R 中的数据框?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43698947/