Строка связывает много фреймов данных с согласованной структурой, но разными именами столбцов - PullRequest
0 голосов
/ 12 марта 2019

У меня есть несколько фреймов данных в R со следующей структурой

> df1
 messy_col_name1  messy_group_name1
 numeric data     "group1"
 ...              ...
 numeric data     "group1"

> df2
 messy_col_name2  messy_group_name2
 numeric data     "group2"
 ...              ...
 numeric data     "group2"
 .
 .
 .
> dfN
 messy_col_nameN  messy_group_nameN
 numeric data     "groupN"
 ...              ...
 numeric data     "groupN"

Все эти фреймы данных имеют 2 столбца. Первый столбец имеет реальные значения, второй столбец представляет собой строку с названием группы (фактор).

Мне было интересно, существует ли эффективный способ связать эти фреймы данных строкой без переименования имен столбцов в каждом фрейме данных. Конечный объект также должен быть фреймом данных. Цель состоит в том, чтобы выполнить ANOVA, используя aov () . Конечный результат должен выглядеть так:

> df.combined
 col_name      group
 numeric_data  "group1"
 ...           ...
 numeric_data  "group1"
 numeric_data  "group2"
 ...           ...
 numeric_data  "group2"
 ...           ...
 numeric_data  "groupN"
 ...           ...
 numeric_data  "groupN"

Мне не удалось использовать общие функции, такие как rbind () , rbind.fill () или bind_rows () .

Я изучил следующие сообщения, но мне не удалось решить эту проблему:

Множество фреймов данных, различной длины строк, похожих столбцов и заголовков фреймов данных, как их связать?

R: привязать фреймы данных с другим именем столбца

Следующая запись была закрыта:

Как связать разные фреймы данных с разными именами столбцов?

однако решение в этом посте неэффективно, когда имеется много фреймов данных.

1 Ответ

1 голос
/ 12 марта 2019

Для привязки кадров данных к строке требуется, чтобы они имели одинаковые имена столбцов.Перемаркировка каждого фрейма данных, вероятно, так же эффективна, как и любое другое решение.

Я бы составил список фреймов данных;это позволяет использовать lapply для переименования столбцов.Тогда вы можете использовать do.call(rbind) или dplyr::bind_rows().

Например:

library(magrittr) # for the pipes
df.combined <- list(df1, df2, df3) %>% 
  lapply(., function(x) setNames(x, c("col_name", "group"))) %>% 
  do.call(rbind, .)

Или использовать dplyr:

library(dplyr)
df.combined <- list(df1, df2, df3) %>% 
  lapply(., function(x) setNames(x, c("col_name", "group"))) %>% 
  bind_rows()

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...