Подмножество в R с использованием или условием с помощью строк

StackOverflow https://stackoverflow.com/questions/2125231

  •  22-09-2019
  •  | 
  •  

Вопрос

У меня есть кадр данных с примерно 40 столбцами, второй столбец, данные [2] содержит имя компании, которое описывает остальные данные строки. Тем не менее, имена компаний различаются в зависимости от года (вытягивание 09 для данных 2009 года, ничего за 2010 год).

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

subset(data, data[2] == "Company Name 09" | "Company Name", drop = T) 

По сути, у меня возникает трудности с использованием оператора или оператора в функции подмножества.

Однако я пробовал другие альтернативы:

subset(data, data[[2]] == grep("Company Name", data[[2]]))

Возможно, есть более простой способ сделать это с помощью строковой функции?

Любые мысли были бы обозначены.

Это было полезно?

Решение

Прежде всего (как Джонатан сделал в своем комментарии), чтобы ссылаться на второй столбец, вы должны использовать либо data[[2]] или же data[,2]. Анкет Но если вы используете подмножество, вы можете использовать имя столбца: subset(data, CompanyName == ...).

И для вас вопрос я сделаю один из:

subset(data, data[[2]] %in% c("Company Name 09", "Company Name"), drop = TRUE) 
subset(data, grepl("^Company Name", data[[2]]), drop = TRUE)

В секунду я использую grepl (представлен с R версией 2.9), которая возвращает логический вектор с TRUE для матча.

Другие советы

Пара вещей:

1) Данные макета полезны, поскольку мы не знаем точно, с чем вы сталкиваетесь. Пожалуйста, предоставьте данные, если это возможно. Может быть, я неправильно понял в следующем?

2) Не используйте [[2]] Чтобы индексировать ваши данные. Frame, я думаю [, "colname"] намного яснее

3) Если единственная разница - это следы «09» в имени, то просто выпустите это:

R> x1 <- c("foo 09", "bar", "bar 09", "foo")
R> x2 <- gsub(" 09$", "", x1)
[1] "foo" "bar" "bar" "foo"
R> 

Теперь вы сможете выполнить свое подмножество на преобразованных данных на леле:

R> data <- data.frame(value=1:4, name=x1)
R> subset(data, gsub(" 09$", "", name)=="foo")
  value   name
1     1 foo 09
4     4    foo
R> 

Вы также можете заменить столбец имени на значение Regexp'ed.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top