Реструктуризация векторов в R - PullRequest
2 голосов
/ 14 марта 2012

если у меня есть файл, содержащий, скажем, (возраст, вес, город, город, рост), есть ли способ реструктурировать файл так, чтобы все числовые данные были на первом или втором месте, например (возраст, вес, рост, город)Городок) по-простому.Я хочу знать это, потому что у меня есть числовые и нечисловые данные длиной около 10 столбцов, и мне нужно нормализовать, используя мин / макс только числовые поля, и было бы быстрее, если бы все они были в одной половине моего набора данных, поэтому я мог бы просто использовать цикл,Извините, я новичок в R и использую его в Mac OS, если это важно.

Ответы [ 2 ]

2 голосов
/ 14 марта 2012

Построение образца данных. Рамка:

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)]
0 голосов
/ 14 марта 2012

Зачем переупорядочивать столбцы, если вы можете просто зациклить их и масштабировать числовые по мере необходимости?

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 также могут представлять определенный интерес (хотя они возвращают только те столбцы, в которых они действуют).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...