Как получить строки, которые соответствуют двум (или более) переменным в R - PullRequest
1 голос
/ 17 апреля 2019

У меня есть список, из которого я хотел бы извлечь конкретные элементы для добавления в новый список, например

   MyFullList = (
  "
  'BLUEh473vs65hRED7vfd8edgf9GLOSS.csv', 
  'BLUE5654vsy56hgfREDjkgr7MATTE.csv', 
  'BLUEhjirhgccsREDgfigjINCAN.csv', 
  'BLUEvfdjhkldfgsGREENdfggh5GLOSS.csv', 
  'BLUEtgergvsGREENsghjkhgnMATTE.csv',
  'BLUEjgh4gvsGREENjkhgfdINCAN.csv',

  ....

  'GREENhfuewhvsBLUEhfsMATTE.csv'
  'GREENkdfgvsBLUEfjhINCAN.csv'
"

)

Если бы я хотел извлечь только те файлы, которые начинались с Blue, но затем содержали оба слова Greenи Мэтт, как бы я это сделал?

В настоящее время мне удалось адаптировать это от кого-то другого, но я не могу манипулировать этим дальше:

MySelection <- MyFullList[grep("^(?=[^BLUE])(?=.*MATTE)", names(MyFullList), value = T, perl=T)]

, который, кажется, просто возвращает что-либо, заканчивающеесяmatte.

Я также пробовал такие вещи, как:

MySelection <- MyFullList[grep("^BLUE|GREEN|MATTE.csv$"), names(MyFullList), value = T]

Который, на мой взгляд, имеет тот же эффект.

И мои попытки использовать звездочку:

MySelection <- MyFullList[grep("^BLUE.*GREEN.*MATTE.csv$"), names(MyFullList), value = T]

, кажется, также полностью ошибочны.

Исходя из этого, как бы я тогда использовал переменную вкоманда Grep?

например

Colours=('BLUE', 'RED', 'GREEN')

for i in 1:length(Colours) {

    grep("^[[Colours[i]]].*GREEN.*MATTE.csv$"), names(MyFullList), value = T]
}

Ответы [ 2 ]

2 голосов
/ 17 апреля 2019

Это проблема, возникающая из-за \n.Альтернативой было бы сначала прочитать данные с помощью read.table:

MyFullList = read.table(text=
  "
  'BLUEh473vs65hRED7vfd8edgf9GLOSS.csv', 
  'BLUE5654vsy56hgfREDjkgr7MATTE.csv', 
  'BLUEhjirhgccsREDgfigjINCAN.csv', 
  'BLUEvfdjhkldfgsGREENdfggh5GLOSS.csv', 
  'BLUEtgergvsGREENsghjkhgnMATTE.csv',
  'BLUEjgh4gvsGREENjkhgfdINCAN.csv',

  ....

  'GREENhfuewhvsBLUEhfsMATTE.csv'
  'GREENkdfgvsBLUEfjhINCAN.csv'
"

,as.is=T,header=F,fill=T)
mfl<-MyFullList[,-ncol(MyFullList)]

Затем наш результат:

mfl[grep("^BLUE.*GREEN.*MATTE.csv$",mfl)]
[1] "BLUEtgergvsGREENsghjkhgnMATTE.csv"
1 голос
/ 17 апреля 2019

Вы можете использовать три логических условия, например, так:

x <- c("BLUEh473vs65hRED7vfd8edgf9GLOSS.csv", 
       "BLUE5654vsy56hgfREDjkgr7MATTE.csv",
       "BLUEhjirhgccsREDgfigjINCAN.csv",
       "BLUEvfdjhkldfgsGREENdfggh5GLOSS.csv",
       "BLUEtgergvsGREENsghjkhgnMATTE.csv",
       "BLUEjgh4gvsGREENjkhgfdINCAN.csv",
       "GREENhfuewhvsBLUEhfsMATTE.cs",
       "GREENkdfgvsBLUEfjhINCAN.csv")


x[grepl("^BLUE", x) & grepl("MATTE",x) & grepl("GREEN",x)]
[1] "BLUEtgergvsGREENsghjkhgnMATTE.csv"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...