#r #list #rbind
#r #Список #rbind
Вопрос:
Я объединил все фреймы данных из списка всего в один фрейм данных.
Фреймы данных внутри списка вызываются
TAI
NAM
HEE
и каждый фрейм данных выглядит следующим образом
Yr-M Compound1 Compound 2
2015-01 0.002 0.15
2015-02 0.004 0.02
2015-03 0.01 0.09
когда я объединяю все фреймы данных с meanall<-do.call(rbind, meaneach)
, я получаю
Yr-M Compound1 Compound2
TAI.1 2015-01 0.002 0.15
TAI.2 2015-02 0.004 0.02
TAI.3 2015-03 0.01 0.09
.
.
.
NAM.1 2015-01 0.03 0.4
NAM.2 2015-02 0.001 0.005
Я хотел бы получить столбец с именами списка, а не в виде имен строк (как указано выше), и без цифр (TAI.1, TAI.2 …), я просто хочу имя TAI
Чтобы я получил это:
List Yr-M Compound1 Compound2
TAI 2015-01 0.002 0.15
TAI 2015-02 0.004 0.02
TAI 2015-03 0.01 0.09
.
.
.
NAM 2015-01 0.03 0.4
NAM 2015-02 0.001 0.005
Как я могу это сделать?
Комментарии:
1. На мгновение я попытался понять, что
mean
делает внутриdo.call
, но я предполагаю, что вы назвали свой список какmean
…? Вы можете понять, почему это плохая практика. Что касается имен строк, у вас не может быть дубликатов. Итак, лучшее, что можно сделать, это преобразовать имена строк в столбец, а затем использоватьgsub
для удаления.[0-9]
2. Я использовал другое имя, но просто изменил его здесь, чтобы избежать недоразумений
Ответ №1:
У вас не может быть дубликатов имен строк. Итак, лучшее, что можно сделать, это преобразовать имена строк в столбец, а затем использовать gsub для удаления .[0-9], т.Е.
df <- do.call(rbind, your_list)
df$list_id <- gsub('\..*', '', rownames(df))
Обратите внимание, что вы можете использовать dplyr
или data.table
версию rbinding списка, которые имеют возможность включать имена списков в виде столбца, т.Е.
dplyr::bind_rows(your_list, .id = 'list_id')
data.table::rbindlist(your_list, idcol = 'list_id')
Ответ №2:
Вы можете добавить дополнительный столбец с именами списков после объединения трех списков через do.call
:
nameColumn <- data.frame(listName = c(rep(c('TAI','NAM','HEE'),
c(length(TAI),length(NAM),length(HEE) ))
meanall <- cbind(meanall, nameColumn)
Если вы хотите, чтобы nameColumn
был первым столбцом, просто переключите аргументы в cbind
на
meanall <- cbind(nameColumn, meanall)