Как удалить столбцы с повторяющимися именами столбцов в R

Я объединил 26 файлов csv (каждый из которых содержит 3 столбца) в 1 кадр данных. Итак, всего у меня 78 столбцов. Теперь столбец 1 аналогичен столбцам 4, 7, 10 и так далее. Точно так же столбец 2 похож на столбцы 5, 8, 11 и т. д. Имена столбцов также похожи, и мне нужно удалить их все, кроме столбца 2, потому что мне нужно 1 его вхождение. Ниже моя кодировка. Я попытался переименовать столбец 2, а затем удалить остальные, но у меня есть следующая ошибка:

Ошибка: имена должны быть уникальными. x Эти имена дублируются:

  • ИП на позициях 2, 4, 6, 8, 10 и т.д.
  • POS в местах 3, 5, 7, 9, 11 и т. д.

кодирование:

colname <- names(df.combined)
colname[2] <- paste(colname[2], "_chrom")
colnames(df.combined) <- colname

library(dplyr) 
df.combined <- select(df.combined, -CHROM).

Кроме того, может быть, есть лучший способ переименовать столбец 2, потому что я мог изменить его только с POS на POS_chrom. На самом деле я хотел дать ему новое имя, а не добавлять к нему _chrom. Имена столбцов следующие (упрощенный пример) после переименования второго столбца. Так продолжается до столбца 78. CHROM POS_chrom PI CHROM POS PI CHROM POS PI

Это моя кодировка, которую я написал для объединения файлов в 1 кадр данных:

library(data.table)

file_list <- list.files('/home/aahm/SoftMaker/Documents/Aaisha/MPhil_PhD/2021/1.January/Results/csv_files/sitepi/ACKR2', pattern="*.csv", full.names=TRUE)

ldf <- lapply(file_list , read.csv)
df.combined <- do.call(cbind, ldf)
View (df.combined)

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

CHROM POS PI CHROM POS PI 3 42809473 0 3 42809473 0 3 42809498 0.01042 3 42809498 0 3 42809524 0 3 42809524 0 3 42809625 0 3 42809625 0 3 42809638 0 3 42809638 0 3 42809715 0.30628 3 42809715 0.20485 3 42809846 0 3 42809846 0

На самом деле мне нужны столбцы 2,3,6,9,12,x,y,z,78 в конечном кадре данных, где x, y и z кратны 3.


person ahusnoo    schedule 14.01.2021    source источник
comment
Не могли бы вы привести воспроизводимый пример df.combined? Используйте не менее dput(df.combined[1:5,]) для предоставления первых строк.   -  person JaiPizGon    schedule 14.01.2021
comment
Как вы объединили их в один фрейм данных? Можете ли вы показать столбцы, которые у вас есть в df.combined, и на что вы хотите их изменить?   -  person Ronak Shah    schedule 14.01.2021
comment
Я полагаю, вы ищете merge.   -  person jay.sf    schedule 14.01.2021
comment
Спасибо за рассмотрение моего вопроса. Я добавил запрошенную дополнительную информацию в вопрос.   -  person ahusnoo    schedule 14.01.2021


Ответы (1)


Я сделал это с помощью следующего кода:

library(data.table)

file_list <- list.files('/home/ahus/Softmaker/ACKR2', pattern="*.csv", full.names=TRUE)

ldf <- lapply(file_list , read.csv)
df.combined <- do.call(cbind, ldf)
x <- seq(0,78,by=3)
df.restructured <- df.combined[c(2,x)]
person ahusnoo    schedule 15.01.2021