Распознавание пробела в условном выражении R - PullRequest
1 голос
/ 13 апреля 2020

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

Если столбец 1 не пустой, то я хочу применить формулу (df $ col3 * df $ col1 ^ df $ col2). Если столбец 1 пуст, то я хочу, чтобы новый столбец имел значение df $ col3. Я попытался

df$col4<-ifelse(df$col1 == "", (df$col3 * df$col1 ^ df$col2), df$col3)

, но проблема, с которой я сталкиваюсь, заключается в том, что она не распознает пустые ячейки в df $ col1. Я также попытался сделать df $ col1 == NA, но безрезультатно. Как мне сделать, чтобы моя условная инструкция распознала пустую ячейку в R и ответила соответственно?

Ответы [ 2 ]

2 голосов
/ 13 апреля 2020

Возможно, вместо пробела есть пробелы. Можно использовать trimws, чтобы удалить пробелы в 'col1', а затем применить ifelse

ifelse(trimws(df$col1) != "", (df$col3 * as.numeric(df$col1) ^ df$col2), df$col3)

Если столбец "col1" равен numeric и имеет элементы NA используйте стандартный is.na для проверки NA элементов

ifelse(!is.na(df$col1), (df$col3 * df$col1 ^ df$col2), df$col3)
0 голосов
/ 13 апреля 2020

Если у вас большая база данных, вы можете рассмотреть data.table для повышения эффективности при назначении. Здесь я назначаю col3 для col4, а затем присваиваю производное значение тем, которые не являются NA в col1, путем «сцепления» двух выражений

library(data.table)
setDT(df)
df[, col4 := col3][!is.na(col1), col4 := col3 * col1 ^ col2]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...