Использование grepl для сопоставления имен с одним конкретным номером - PullRequest
0 голосов
/ 21 сентября 2018

У меня есть данные с именами столбцов и строк, в которых есть строка с номером от 1 до 100.

Я использую grepl для выбора имен с определенным номером (игнорируястрока).Скажем, у меня есть:

a <- matrix(c(1:16), nrow = 4, byrow = TRUE)
colnames(a) <- c("aaa1", "bbb1", "abc11", "ccc100")
rownames(a) <- c("aaa1", "bbb1", "abc11", "ccc100")

с матрицей a

       aaa1 bbb1 abc11 ccc100
aaa1      1    2     3      4
bbb1      5    6     7      8
abc11     9   10    11     12
ccc100   13   14    15     16

Я хотел бы выбрать строки и столбцы, которые содержат «1», но больше ничего.Вот так:

     aaa1 bbb1
aaa1    1    2
bbb1    5    6 

Но когда я использую:

a[grepl("1" , rownames(a)) , grepl("1" , colnames(a))]

, я снова получаю матрицу a.Я попытался использовать «^ 1», но он, конечно, не находит ни одного имени, которое точно соответствует 1. Что я могу сделать, чтобы решить эту проблему?Я ценю любую помощь.

1 Ответ

0 голосов
/ 21 сентября 2018

РЕДАКТИРОВАТЬ

Как обновлено в вопросе, цифры идут от 1 до 100, и мы хотим извлечь только те строки и столбцы, которые точно равны 1. Мы можем извлечь всю числовую частьиз имени строки и столбца, а затем отфильтруйте только те, которые в точности равны 1.

library(stringr)
a[str_extract(rownames(a), "[0-9]+") == 1, str_extract(colnames(a), "[0-9]+") == 1]

#     aaa1 bbb1
#aaa1    1    2
#bbb1    5    6

Продолжая ту же логику в grepl, мы можем обновить регулярное выражение и искать символы, за которыми следует "1 "в конце строки

a[grepl("[A-Za-z]1$", rownames(a)), grepl("[A-Za-z]1$", colnames(a))]

#     aaa1 bbb1
#aaa1    1    2
#bbb1    5    6

Оригинальный ответ

Используйте« 1 $ », что означает строки, оканчивающиеся на« 1 », а затемВы можете подмножество.

a[grepl("1$",rownames(a)), grepl("1$",colnames(a))]

#     aaa1 bbb1
#aaa1    1    2
#bbb1    5    6

, что эквивалентно

a[endsWith(rownames(a), "1"), endsWith(colnames(a), "1")]

#     aaa1 bbb1
#aaa1    1    2
#bbb1    5    6
...