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

У меня есть кадр данных приблизительно с 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]]))

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

Любые мысли ценились бы.

10
задан jogo 9 January 2016 в 15:33
поделиться

2 ответа

Прежде всего (как это сделал Джонатан в своем комментарии) для ссылки на вторую колонку следует использовать либо data[[2]], либо data[,2]. Но если вы используете подмножество, вы можете использовать имя колонки: subet(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 для совпадения.

17
ответ дан 3 December 2019 в 17:58
поделиться

Пара вещей:

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

2) Не используйте [[2]] для индексирования вашего data.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.

5
ответ дан 3 December 2019 в 17:58
поделиться
Другие вопросы по тегам:

Похожие вопросы: