Изменить заголовки столбцов в R с чередованием пробелов и имен (для формата genalex)

У меня есть фрейм данных под названием genalex, потому что я пытаюсь поместить свои генетические данные в общий формат «genalex». Я только что использовал функцию strsplit в R для разделения столбцов, и теперь у меня есть это:

> genalex[1:5,1:10]
  Ind V1 V2 V3 V4 V5 V6 V7 V8 V9
1 100  A  A  C  C  N  N  C  C  N
2 101  A  A  C  C  N  N  N  N  N
3  10  A  A  C  C  N  N  C  C  N
4  11  A  A  N  N  N  N  C  C  N
5  12  N  N  N  N  N  N  C  C  G

Этот фрейм данных на самом деле имеет 330 строк и 32 068 столбцов. Я хотел бы заменить имя каждого другого столбца (V1, V3, V5, V7, V9 и т. д.) НОВЫМ именем. Я также хотел бы удалить все остальные имена столбцов (V2, V4, V6, V8 и т. д.)

Для новых имен столбцов я хотел бы использовать имена столбцов из моего старого фрейма данных, прежде чем разделить столбцы. Я назову старый фрейм данных table. Этот фрейм данных имеет 16 034 столбца, потому что он не включает пробелы:

 table[1:5,1:5]
    X X446043 X539052 X614054 X683054
1 100       A       C       N       C
2 101       A       C       N       N
3  10       A       C       N       C
4  11       A       N       N       C
5  12       N       N       N       C

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

   > genalex[1:5,1:8]
      Ind    X446043         X539052         X614054         X683054
    1 100    A       A       C       C       N       N       C  
    2 101    A       A       C       C       N       N       N  
    3  10    A       A       C       C       N       N       C  
    4  11    A       A       N       N       N       N       C  
    5  12    N       N       N       N       N       N       C  

Спасибо за любую помощь.


person user3545679    schedule 02.01.2016    source источник


Ответы (1)


Вы можете использовать функцию seq для получения нечетных и четных позиций:

names(genalex)[seq(2,ncol(genalex),2)] <- names(table)
names(genalex)[seq(1,ncol(genalex),2)] <- ""
names(genalex)[1] <- "Ind"

Первая строка переименовывает все индексы столбцов с четными номерами (2,4,6,...) с именами столбцов из таблицы, а вторая устанавливает все индексы столбцов с нечетными номерами в пустые. Затем переименуйте первый столбец в «Ind».

person mattdevlin    schedule 02.01.2016
comment
Спасибо; просто для ясности, десятичные знаки используются в качестве заполнителей для пробелов? Они по-прежнему рассматриваются как пробелы в R? - person user3545679; 03.01.2016
comment
@ user3545679: десятичные дроби? Я не понимаю вашего вопроса. - person mattdevlin; 03.01.2016
comment
Вместо того, чтобы получать пробелы для пустых столбцов, я получаю десятичные точки в качестве заголовков. Когда я пытаюсь добавить NA вместо пробелов, используя этот код: имена (genalex) [seq (1, ncol (genalex), 2)] ‹- NA, тогда мои пустые столбцы приводят к: NA, NA.1, NA.2 , Н.А.3. Все еще десятичные!? - person user3545679; 03.01.2016
comment
Я не уверен, почему это произошло. Попробуйте установить для всех столбцов значение: names(genalex) <- rep("", ncol(genalex)), затем первую и третью строки приведенного выше кода. - person mattdevlin; 03.01.2016