R - Создать подмножество данных, используя переменную - PullRequest
2 голосов
/ 22 января 2012

Я пытаюсь создать цикл, который будет выполнять серию анализов.Я использую geeglm из geepack, который не работает, если есть какие-либо нулевые значения.Создание подмножества решает эту проблему, но, похоже, невозможно установить подмножество динамически на основе изменяющейся переменной.

while (j <= y.num) {

     strSubset = as.character(df.IV$IV[j])  #Gives column name in quotes
     df.data.sub = subset(df.data, strSubset>=0)

 #subset dataset is not created

 # analyses on subset take place

    j = j + 1
 }

Если я вписываю имя переменной в формулу, она работает, поэтому я предполагаю, что я не создаю переменную таким образом, чтобы она могла быть оценена в функции подмножества.Любая помощь будет принята с благодарностью!

Воспроизводимый пример:

# dataset
age<-18:29
height<-58:69
df.ex=data.frame(age=age,height=height)
df.ex[4,1]<-NA

# dataset of columns that will be used for analysis
values<-c("age", "height")
df.variables=data.frame(values)

 # Age column has a null (NA) value.  The row must be removed for the analysis to run
 # explicit creation  
df.ex.sub.explicit<-subset(df.ex, age >= 0)
dim(df.ex.sub.explicit) #11 obs of 2 variables


i=1
strFilter=as.character(df.variables$values[i])
df.ex.sub.passvar<-subset(df.ex,strFilter>=0)
dim(df.ex.sub.explicit) #12 obs of 2 variables

1 Ответ

1 голос
/ 22 января 2012

Я бы предложил:

df.ex=data.frame(age=18:29,height=58:69)
df.ex[4,1]<-NA

Немного легче сохранить этот список переменных как символьный вектор, если только вам не нужно, чтобы переменные были связаны с другой информацией о переменных ...

df.variables <- c("age", "height")

for (i in seq_along(df.variables)) {
  vname <- df.variables[i]  ## get variable name
  df.ex.sub.passvar <- df.ex[!is.na(df.ex[[vname]]),]
  print(dim(df.ex.sub.passvar))
}

subset и $ отлично подходят для интерактивного использования, но для программирования, вероятно, лучше всего использовать индексирование в "машинном стиле" с [ и [[ ... также вам необходимо использовать is.na() для проверки NA значений. У subset() есть особенность в том, что он будет отбрасывать значения, для которых результат теста равен или FALSE или NA, но, вероятно, яснее использовать явное тест.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...