Подмножество в R с использованием условия ИЛИ со строками
У меня есть кадр данных с примерно 40 столбцами, второй столбец, данные [2] содержат имя компании, которое описывает остальные данные строки. Однако названия компаний различаются в зависимости от года (данные за 2009 год за 2009 год, ничего для 2010 года).
Я хотел бы иметь возможность подмножества данных, чтобы я мог затянуть оба года одновременно. Вот пример того, что я пытаюсь сделать...
subset(data, data[2] == "Company Name 09" | "Company Name", drop = T)
По существу, мне трудно использовать оператор OR внутри функции подмножества.
Однако я пробовал другие альтернативы:
subset(data, data[[2]] == grep("Company Name", data[[2]]))
Возможно, есть более простой способ сделать это с помощью строковой функции?
Любые мысли будут восприняты.
Ответы
Ответ 1
Прежде всего (как сделал Джонатан в своем комментарии), чтобы ссылаться на второй столбец, вы должны использовать либо 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
для соответствия.
Ответ 2
Несколько вещей:
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.