如果我有一个包含说(年龄,体重,城市,城镇,高度)的文件,有没有办法重组文件,以便所有的数字数据eithier来到第一或第二,如(年龄,体重,身高,城市) ,镇)以一种简单的方式。我想知道这个,因为我有大约10列长的数字和非数字数据,并且只使用min / max只有数字字段进行标准化,如果它们都在我的数据集的一半中会更快,所以我可以使用一个循环。对不起,我是R的新手,我在mac os中使用它,如果这很重要的话。
答案 0 :(得分:2)
构建示例data.frame:
dat <- data.frame(age=runif(10), weight=runif(10), city="New York", town="any", height=runif(10))
这就是你可以订购列的方式:
dat.ordered <- dat[,order(sapply(dat,is.numeric), decreasing=T)]
答案 1 :(得分:0)
为什么还要重新排序列,当你可以简单地循环它们并根据需要缩放数字?
dat <- data.frame(x1 = runif(10),
x2 = letters[1:10],
x3 = rnorm(10),
x4 = LETTERS[1:10])
data.frame(lapply(dat,function(x){if (is.numeric(x)) scale(x) else x}))
使用一些方便的 plyr 功能的解决方案,虽然有点奇怪,但仍然有点奇怪:
require(plyr)
colwise(function(x){if (is.numeric(x)) scale(x) else x})(dat)
版本numcolwise
和catcolwise
也可能有一些兴趣(尽管它们只返回它们所依据的列)。