rbind () на условной основе

Вот вопрос. У меня есть куча операторов if, которые создают разные фреймы данных (AF) на основе пользовательских данных. В некоторых случаях некоторые кадры данных будут пустыми, поэтому, возможно, (AC) пусты, но (DF) содержат информацию.

Я пытаюсь создать условный rbind(), где он объединяет строки, только если кадр данных не пуст.

Я не совсем уверен, как это сделать? Я не знаю, должен ли я создать несколько условий и использовать другое выражение if:

cond_a <- nrow(a) != 0
cond_b <- nrow(b) != 0
cond_c <- nrow(c) != 0
cond_d <- nrow(d) != 0
cond_e <- nrow(e) != 0
cond_f <- nrow(f) != 0 

но тогда я не знаю, как использовать эти условия...

РЕДАКТИРОВАТЬ: Чтобы сделать шаг назад и лучше объяснить: у меня есть один фрейм данных, который я разделил на 6 различных фреймов данных путем подстановки по столбцу, поэтому он разбивает его на 6 фреймов данных (AG). Колонка имеет буквы AG. Эти буквы AG в этом столбце изменяются в зависимости от ввода пользователя.

Затем я получаю серию операторов if, которые спрашивают: "Если A не пусто, то выполните эту агрегацию", тем самым пропуская df, если в нем нет данных. Агрегация занимает от 16 до 19 столбцов. Поскольку пустой df не был агрегирован, он все еще имеет 19 столбцов. После того, как я выполню эти операторы и агрегации if, у меня останется dfA, dfB, dfC и т. Д., Которые либо агрегированы (16 столбцов), либо все еще пусты (19 столбцов). Затем я хочу кусок кода, который говорит: "для df, который был агрегирован (16 столбцов) rbind, если df не был агрегирован (пуст), то не выполняйте rbind.

Спасибо!

1 ответ

Решение

Вы можете сделать что-то вроде этого:

  1. Создайте пустой список фреймов данных, которые вы хотите выбрать.
  2. Написать кучу if заявления, чтобы увидеть, какие из них содержат ненулевые нули
  3. Продолжайте добавлять эти имена ненулевых DF в пустой список, созданный на шаге 1
  4. Напишите выражение, которое сворачивает эти имена в rbind выражение
  5. Оцените выражение

Вот скрипт для этого:

1.Создайте пустой список для хранения имен фреймов данных.

list.df = " "

2&3. Если операторы проверяют, является ли фрейм данных ненулевым, добавьте имя в список, если true

if(nrow(df.a) > 0) { 
  list.df=c(list.df,deparse(substitute(df.a)))
 }

if(nrow(df.b) > 0) { 
  list.df=c(list.df,deparse(substitute(df.b)))
 }

if(nrow(df.c) > 0) { 
 list.df=c(list.df,deparse(substitute(df.c)))
 }

.... Так дальше от А до Г

if(nrow(df.g) > 0) { 
 list.df=c(list.df,deparse(substitute(df.g)))
 }

4. сформулировать выражение

list.df = list.df[2:length(list.df)] #remove first element 
expression = paste0("df.combined = rbind(",paste0( list.df, collapse =
','), paste0(")"))

5. Оцените выражение

eval(parse(text=expression))

df.combined будет вашим последним набором данных, который вы ищете

Другие вопросы по тегам