как вы отделяете тибл на основе условия в R? - PullRequest
1 голос
/ 27 апреля 2020

Скажем, у меня есть следующий тиббл:

df <- tibble(name = c("CTX_M", "CblA_1", "OXA_1", "ampC"),
             rpkm = c(350, 4, 0, 0))

, и я хочу разделить тиббл на один, где rpkm = 0, и второй, где rpkm> 0.

I ' мы пытались создать функцию для выбора строк, где rpkm = 0, следующим образом

zero <- function(data){
  input = data
  if(input[, 2] == 0){
    n = input
    print(n)
  }
}

, но я получаю следующую ошибку, когда пытаюсь запустить ее следующим образом

Zero <- zero(df)

Warning message:
In if (input[, 2] == 0) { :
  the condition has length > 1 and only the first element will be used

As Я не так хорош с R, я не уверен, что идет не так, или как подойти к этому?

1 Ответ

0 голосов
/ 27 апреля 2020

В качестве альтернативы, вы можете использовать удобный пакет под названием 'dplyr', который является частью семейства пакетов из tidyverse. У них много удобных функций для работы с данными.

#library of interest
library(dplyr)

##Your data
df <- tibble(name = c("CTX_M", "CblA_1", "OXA_1", "ampC"),
             rpkm = c(350, 4, 0, 0))

##Using the filter function to get all = 0
df_filt1 <- df %>% 
  filter(rpkm == 0)

##see what the filtering looks like
df_filt1

# A tibble: 2 x 2
  name   rpkm
  <chr> <dbl>
1 OXA_1     0
2 ampC      0

##Using the filter function to get all > 0
df_filt2 <- df %>% 
  filter(rpkm > 0)

##see what the filtering looks like
df_filt2

# A tibble: 2 x 2
  name    rpkm
  <chr>  <dbl>
1 CTX_M    350
2 CblA_1     4
...