Объединить / объединить серии столбцов - PullRequest
0 голосов
/ 18 февраля 2019

У меня есть такой фрейм данных, который продолжается до переменной длины (четное число столбцов):

V1    V2    V3    V4    V5    V6   
A     B     C     D     E     F  

Я бы хотел, чтобы первая половина фрейма данных образовывала пары со второй половинойфрейм данных.(В приведенном выше случае это будут пары, такие как AD, BE и CF.)

Взятые из другого поста, я сделал это, но мне не удается сделать из него фрейм данных.

lapply(1:(ncol(df)/2), function(x) paste(df[,c(x,x+(ncol(df)/2))], collapse = "")) %>% 
data.frame 

Может ли кто-нибудь объяснить, что на самом деле происходит в этом фрагменте кода?

1 Ответ

0 голосов
/ 18 февраля 2019

Я не уверен точно, с какой проблемой вы сталкиваетесь, но я вижу потенциально две проблемы.Во-первых, переменные вашего персонажа являются факторами.В этом случае вы получите обратно основные индексы, а не символы.Вторая потенциальная проблема может быть связана с функцией paste.Написание этого так дает мне правильные результаты.Вам придется использовать rename_all из dplyr, чтобы сделать имена переменных пригодными для использования.

lapply(1:(ncol(df)/2), function(x) paste0(df[[x]], df[[x + ncol(df) / 2]])) %>% data.frame 

Теперь, что здесь происходит:

Предполагая, что у вас всегда будет четное числостолбцов мы делим это число на два, а затем для каждого индекса этого столбца, применяя функцию paste0.paste0 - простая оболочка для paste(..., sep = '').Мы вставляем столбец x и столбец x + половину количества столбцов.В моем обновленном коде я использую [[]], потому что он вернет символьный вектор.

...