2016-01-21 1 views
3

У меня есть список со многими файлами данных. Каждый блок данных содержит повторяющиеся столбцы. Я хотел бы возвращать только уникальные столбцы в каждом кадре данных. Я пробовал несколько кодов, в том числе ниже, но продолжаю получать ошибки. Код, который я сейчас использую, приведен ниже, а также приведено описание первого фрейма данных в моем списке. Я ценю любую помощь.Удалите повторяющиеся столбцы в списке dataframes r

x <- lapply(dataFiles, function(x){ 
    for(i in 1:length(colnames(dataFiles))) 
    dataFiles[[!duplicated(dataFiles[[i]])]] 
} 
) 



str(dataFiles[[1]]) 
'data.frame': 20381 obs. of 10 variables: 
$ FILEID : chr "ACSSF" "ACSSF" "ACSSF" "ACSSF" ... 
$ FILETYPE : num 2.01e+08 2.01e+08 2.01e+08 2.01e+08 2.01e+08 ... 
$ STUSAB : chr "ny" "ny" "ny" "ny" ... 
$ CHARITER : int 0 0 0 0 0 0 0 0 0 0 ... 
$ SEQUENCE : int 1 1 1 1 1 1 1 1 1 1 ... 
$ LOGRECNO : int 3391 3392 3393 3394 3395 3396 3397 3398 3399 3400 ... 
$ B00001_001: int 212 215 278 246 235 NA 225 522 213 262 ... 
$ B00002_001: int 108 124 126 105 122 NA 108 105 104 140 ... 
$ LOGRECNO : int 3391 3392 3393 3394 3395 3396 3397 3398 3399 3400 ... 
$ GEOID  : chr "14000US36001000100" "14000US36001000200" "14000US36001000300" "14000US36001000401" ... 
+0

@David LOGRECNO дублирует столбец – user3067851

ответ

5

Вот простой пример:

tmp <- data.frame(seq(10), seq(10), rnorm(10)) 
colnames(tmp) <- c("A","A","B") 

l <- list(tmp, tmp) 

lapply(l, function(x) x[,!duplicated(colnames(x))]) 

или как отмечено @agstudy можно использовать unique

lapply(l, function(x) x[,unique(colnames(x))]) 
+3

или 'unique' .. .. – agstudy

+0

уникальный будет возвращать каждый столбец один раз,! Duplicated будет возвращать столбцы, которые появляются ровно один раз, нет? – latorrefabian

+0

@latorrefabian no. 'x = c (1, 1, 2); x [! duplicated (c (1, 1, 2))]. (Дает '# [1] 1 2'). См. Также '? Duplicated', [Как удалить ВСЕ дубликаты, чтобы их не осталось?] (Http://stackoverflow.com/a/13763299/903061) – Gregor