Как извлечь строки данных, которые соответствуют вхождению? - PullRequest
1 голос
/ 17 мая 2019

У меня есть data.frame с 3 столбцами, который выглядит следующим образом:

       var1    var2   corr
1   OTU0001 OTU0004  0.882
2   OTU0001 OTU0014  0.656
3   OTU0004 OTU0014  0.456
4   OTU0001 OTU0015  0.690
5   OTU0004 OTU0015  0.612
6   OTU0014 OTU0015  0.565
7   OTU0001 OTU0016  0.652
8   OTU0004 OTU0016  0.630
9   OTU0014 OTU0016  0.465
10  OTU0015 OTU0016  0.884
11  OTU0001 OTU0017  0.766

Я хотел бы извлечь строки, которые соответствуют вхождению "OTU0016", например.Я должен получить

7   OTU0001 OTU0016  0.652
8   OTU0004 OTU0016  0.630
9   OTU0014 OTU0016  0.465
10  OTU0015 OTU0016  0.884

Я пытался grep("^OTU0016$",Df), но он возвращает только мне integer(0)

Ответы [ 2 ]

2 голосов
/ 17 мая 2019

Для всех столбцов вы можете использовать:

Df[rowSums(Df == "OTU0016") > 0,]

Для ваших двух столбцов:

Df[rowSums(Df[c("var1", "var2") == "OTU0016") > 0,]

Или

Df[Df$var1 == "OTU0016" | Df$var2 == "OTU0016",]
0 голосов
/ 17 мая 2019

С dplyr вы можете сделать:

df %>%
 filter_at(vars(starts_with("var")), any_vars(. == "OTU0016"))

     var1    var2  corr
1 OTU0001 OTU0016 0.652
2 OTU0004 OTU0016 0.630
3 OTU0014 OTU0016 0.465
4 OTU0015 OTU0016 0.884

Или с base R:

df[apply(df[, 1:2], 1, function(x) any(grepl("OTU0016", x, fixed = TRUE))), ]

      var1    var2  corr
7  OTU0001 OTU0016 0.652
8  OTU0004 OTU0016 0.630
9  OTU0014 OTU0016 0.465
10 OTU0015 OTU0016 0.884

Или:

df[apply(df[, -grepl("corr", names(df), fixed = TRUE)], 1, function(x) any(grepl("OTU0016", x, fixed = TRUE))), ]

Или:

df[apply(df[, -grepl("corr", names(df), fixed = TRUE)], 1, function(x) any(match(x, "OTU0016", nomatch = 0))), ]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...