Я использую R (RStudio) уже пару недель, и столкнулся с проблемой, которую я не знаю, как объяснить. Я также нигде не могу найти упоминания об этом в Интернете, и мой код, кажется, соответствует стандартам, установленным большинством интерактивных руководств по самопомощи. Скорее всего, это связано с моим ограниченным пониманием R. Любые предложения будут оценены.
Я читаю в электронной таблице Excel (dataInput <- readxl::read_xlsx('demo.xlsx')
), которая затем сохраняется как тиббл, вот так (это только демонстрационные данные):
Val Colour Range Rate
<dbl> <chr> <dbl> <dbl>
1 NA red 10 0.1
2 NA blue 2 0.2
3 1 green 3 0.3
4 1 red NA 0.4
5 0 blue 5 0.5
6 0 green 4 0.6
7 3 red 6 NA
8 3 blue 7 0.7
Я хочу использовать dplyr::filter
, чтобы отфильтровать все строки из этой таблицы, в которых Val
равен NA или 0, а затем выбрать указанные столбцы. Для этого мой код выглядит следующим образом:
dataOutput <- dplyr::filter(dataInput, Val != 0 | Val != "") %>%
dplyr::select(c(Val, Colour, Rate))
Я предполагал, что использование оператора 'или' будет означать, что строки в Val
, которые содержат 0 или являются пустыми, будут удален, и поэтому мой выходной тиббл будет выглядеть так:
Val Colour Rate
<dbl> <chr> <dbl>
1 1 green 0.3
2 1 red 0.4
3 3 red NA
4 3 blue 0.7
Вместо , кажется, что код R производит что-то, в чем удаляются пустые строки в Val
, но не строк, содержащих 0:
Val Colour Rate
<dbl> <chr> <dbl>
1 1 green 0.3
2 1 red 0.4
3 0 blue 0.5
4 0 green 0.6
5 3 red NA
6 3 blue 0.7
Я могу добиться желаемого эффекта, создав две отдельные строки кода в трубе, например, так: *
dataOutput <- dplyr::filter(dataInput, Val != 0) %>%
dplyr::filter(Val != "") %>%
dplyr::select(c(Val, Colour, Rate))
- - или, как ни странно, с помощью оператора &
вместо оператора |
, но я обеспокоен тем, что, если я что-то неправильно понимаю, это может вызвать проблемы в моих данных, которые я не знаю, как определить. Это означало бы, что я не могу доверять выводу моего скрипта.
RStudio не выдает никаких сообщений об ошибках, но это поведение согласованно независимо от того, какой набор данных я использую, или даже какие столбцы я пытаюсь отфильтровать (будь то один или два разных столбца). У кого-нибудь есть мысли?