Есть несколько проблем с вашим кодом. Во-первых, у вас есть «#» в одном из имен столбцов, что означает, что вам нужно заключить имя столбца в кавычки; в противном случае R будет думать, что вы начинаете комментарий, и игнорирует остальную часть строки. Таким образом, ваша строка
Data1 <- Data[- grep("",Data$Item# || "12345" Data$Charge)
будет интерпретироваться как
Data1 <- Data[- grep("",Data$Item
как R, что приведет к синтаксической ошибке.
В любом случае этот синтаксис работает не так, как grep
. Если вы хотите протестировать столбцы на основе нескольких регулярных выражений, вы можете использовать несколько функций grepl
, каждая из которых возвращает логический вектор, и просто объединить их. Однако вы не можете использовать grep
или grepl
с пустой строкой, поскольку каждая строка содержит пустую строку! Вы можете проверить пустую строку, просто используя == ""
При подстановке строк, вам нужно запятую после условий и закрывающей скобки, как указывал @dcarlson.
Наконец, вам следует использовать &
, если вы хотите найти случаи, когда применяются только оба условия, а не ||
.
Следовательно, ваш код должен быть:
Data1 <- Data[-which(Data$'Item#' == "" & grepl("12345", Data$Charge)),]
Data1
#> Item# Charge
#> 1 50 0
#> 2 61 12345
#> 4 43 0
#> 5 2521
#> 6 7 12345
Я считаю, что это соответствует ожидаемому результату.
Используемые данные
df <- structure(list(`Item#` = c("50", "61", "", "43", "", "7"), Charge = c("0",
"12345", "12345", "0", "2521", "12345")), row.names = c(NA, -6L
), class = "data.frame")