Просто запустите объединение цепей без all=TRUE
.Если окончательный фрейм данных пуст, то NO Class соответствует ВСЕМ наборам данных.Чтобы избежать конфликтов имен с merge
, необходим шаг для динамического переименования столбцов.Ниже добавляются подчеркивания суффиксов к соответствующему номеру элемента списка.
temp <- list.files(pattern="*.csv")
myfiles <- lapply(temp, read.delim)
# RENAME val1 and val2 COLUMNS TO AVOID merge CONFLICT
myfiles <- lapply(seq_along(myfiles), function(i)
setNames(myfiles[[i]], c("Class", paste0("val1_", i), paste0("val2_", i))))
# CHAIN MERGE
final_df <- Reduce(function(x, y) merge(x, y, by="Class"), myfiles)
# UNIQUE Class NAMES
unique(final_df$Class)
В качестве альтернативы, складывают все кадры данных и возвращают частоту, равную длине myfiles :
temp <- list.files(pattern="*.csv")
myfiles <- lapply(temp, read.delim)
# ROW BIND ALL DFs
stack_df <- do.call(rbind, myfiles)
# RETURN VECTOR OF CLASS VALUES AND COUNTS
freqs <- table(stack$Class)
# RETURN NAME WITH VALUE COUNT EQUAL LENGTH OF myfiles
names(freqs[freqs == length(myfiles)])
Rextester demo