бен и транспонировать в R - PullRequest
2 голосов
/ 11 марта 2019

Я все еще изучаю R и программирую в целом, так что потерпите меня.

моя проблема У меня есть идея сокращения размеров, состоящая из трех этапов. Мне нужна помощь с первыми двумя.

  1. строк бина
  2. транспонировать объединенные строки в новые столбцы, чтобы столбцы увеличивались на количество элементов, а строки уменьшались на количество элементов
  3. Выполните PCA, чтобы уменьшить столбцы

Итак, данные пошли бы из этого:

  A  B  C  D
1 W1 X1 Y1 Z1
2 W2 X2 Y2 Z2
3 W3 X3 Y3 Z3
4 W4 X4 Y4 Z4
5 W5 X5 Y5 Z5
6 W6 X6 Y6 Z6

итак, если я бен на 2 и транспонирую, это будет выглядеть примерно так:

   A   A   B   B   C   C   D   D
1 W1   W2  X1  X2  Y1  Y2  Z1  Z2
2 W3   W4  X3  X4  Y3  Y4  Z3  Z4
3 W5   W6  X5  X6  Y5  Y6  Z5  Z6

Я почти уверен, что мне нужно вложить bin и транспонировать в какую-то функцию, но я не уверен, что на первом месте или вообще не подходит, как к этому подойти, поэтому любые предложения помогут!

Я действительно надеюсь, что в этом есть какой-то смысл, дайте мне знать, как я могу перефразировать, если это необходимо!

EDIT Я работаю с целочисленными типами данных, вот фрагмент моих фактических данных, которые я хотел бы скопировать и расширить.

> head(dataset[1:4])
   EMG1  EMG2  EMG3  EMG4
1 32744 32571 32935 32279
2 32788 32934 32767 32624
3 32828 33202 32587 32377
4 32870 33269 32423 32954
5 32838 33319 32126 32721
6 32903 33502 32652 32151

1 Ответ

0 голосов
/ 11 марта 2019

Предполагая, что эти буквенно-цифровые записи не должны заменять числовые значения, я сначала запустил бы это:

dat[] <- lapply(dat, as.character) # ensures we get rid of factors

При этом используется повторное использование логических индексов внутри функции, которая последовательно применяется ко всему фрейму данных длясоздать два списка из каждого столбца.Это тогда приведено к кадру данных.Первоначальный результат res имеет довольно странные имена, которые сокращаются с помощью некоторой простой работы с регулярными выражениями.

 res <- data.frame( lapply(dat, 
         function(cl){list( list(cl[c(TRUE,FALSE)], 
                            list(cl[!c(TRUE,FALSE)]) )) }))
 names(res) <- sub("\\..+$", "", names(res))

> res
   A  A  B  B  C  C  D  D
1 W1 W2 X1 X2 Y1 Y2 Z1 Z2
2 W3 W4 X3 X4 Y3 Y4 Z3 Z4
3 W5 W6 X5 X6 Y5 Y6 Z5 Z6
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...