функция фильтра от tidyverse и as.numeri c () - PullRequest
0 голосов
/ 15 января 2020

Мне пришлось заставить свой фрейм данных превращаться в символ и поворачиваться, чтобы получить окончательный результат, который у меня есть. Я пытаюсь выполнить следующие 3 задачи.

  1. все местоположения ячеек, которые нельзя превратить в цифры c, используя as.numeric()
  2. строки фильтра, где все заданные c столбцы, оканчивающиеся на «_chart», являются NA.
  3. строк фильтра, где значение Ref не совпадает ни с одним из столбцов _chart

SAMPLE DATA

compared <- structure(list(ID = c("51-07518", "51-07518", "51-07518", "51-07518", 
"51-07518", "51-07518"), name = c("SC5pos", "SC7pos", "SC1", 
"SC4neg", "SC6pos", "Not found"), Ref = c("1", "1", "1", "1", 
"1", "1"), A_chart = c("R2", NA_character_, 
NA_character_, NA_character_, NA_character_, NA_character_), 
    A2_chart = c(NA_character_, NA_character_, NA_character_, 
    "1", "0", NA_character_), B_chart = c(NA_character_, 
    "0", NA_character_, NA_character_, NA_character_, 
    NA_character_), D_chart = c(NA_character_, NA_character_, 
    "1", NA_character_, NA_character_, NA_character_
    )), row.names = c(NA, -6L), class = c("tbl_df", "tbl", "data.frame"
))
# A tibble: 6 x 7
  ID       name      Ref   A_chart A2_chart B_chart D_chart
  <chr>    <chr>     <chr> <chr>    <chr>             <chr>   <chr>  
1 51-07518 SC5pos    1     R2       NA                NA      NA     
2 51-07518 SC7pos    1     NA       NA                0       NA     
3 51-07518 SC1       1     NA       NA                NA      1      
4 51-07518 SC4neg    1     NA       1                 NA      NA     
5 51-07518 SC6pos    1     NA       0                 NA      NA     
6 51-07518 Not found 1     NA       NA                NA      NA

Я читал форумы и команды из dplyr и думал filter_at? Примерно так:

library(tidyverse)
filter_at(compared, vars(ends_with("chart")), all_vars(!is.na(.)))

1 Ответ

1 голос
/ 15 января 2020

Я думаю, вам нужно any_vars и объединить несколько условий вместе.

dplyr::filter_at(compared, vars(ends_with("chart")), any_vars(!is.na(.) & . != Ref))

# A tibble: 3 x 7
#   ID       name  Ref   A_chart A2_chart B_chart D_chart
#  <chr>    <chr>  <chr> <chr>   <chr>    <chr>   <chr>  
#1 51-07518 SC5pos 1     R2      NA       NA      NA     
#2 51-07518 SC7pos 1     NA      NA       0       NA     
#3 51-07518 SC6pos 1     NA      0        NA      NA     
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...