указание условий в качестве переменной для подмножества фрейма данных в R - PullRequest
3 голосов
/ 24 июня 2011

Предположим, у меня есть фрейм данных, df с 30 столбцами: от A1 до A30.Я знаю, что могу поднастроить этот фрейм данных, написав команду вроде:

 filteredrows = subset(df, A1 == 30 & A2 == 2 & A3 == "this")

Приведенный выше пример фильтрует данные на основе значений в трех столбцах, но я должен сделать это для значений примерно в 12 столбцах.Запись этих 12 значений в функцию subset () сделает его слишком длинным.Чтобы сделать код чище, есть способ, которым я могу указать условие как переменную или функцию, а затем использовать, которые определяют условия в функции подмножества.Возможно ли что-то вроде следующего?

x = (A1 == 30 & A2 == 2 & A3 == "this")
filteredrows = subset(df, x)

Заранее спасибо.

Ответы [ 2 ]

4 голосов
/ 24 июня 2011

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

d <- data.frame(x=letters[1:10],y=runif(10))
ss <- expression(x == "a")
subset(d, eval(ss))
0 голосов
/ 24 июня 2011

Ваше предложение почти работает, вам просто нужно with, когда вы получите x.

> df <- expand.grid(A1=(1:3)*10,A2=1:3,A3=c("this","that"))
> x <- with(df, (A1 == 30 & A2 == 2 & A3 == "this"))
> subset(df, x)
  A1 A2   A3
6 30  2 this

Вы также можете получить подмножество таким образом.

> df[x,]
  A1 A2   A3
6 30  2 this

Вы также можете поместить x во фрейм данных df; в противном случае переупорядочение фрейма данных может испортить что-то вроде

df$x <- with(df, (A1 == 30 & A2 == 2 & A3 == "this"))
subset(df,x)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...