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 ответ
Вы можете сделать что-то вроде этого:
- Создайте пустой список фреймов данных, которые вы хотите выбрать.
- Написать кучу
if
заявления, чтобы увидеть, какие из них содержат ненулевые нули - Продолжайте добавлять эти имена ненулевых DF в пустой список, созданный на шаге 1
- Напишите выражение, которое сворачивает эти имена в
rbind
выражение - Оцените выражение
Вот скрипт для этого:
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
будет вашим последним набором данных, который вы ищете