R - 使用变量创建子集数据框

时间:2012-01-21 20:40:59

标签: r

我正在尝试创建一个将执行一系列分析的循环。我正在使用geepack中的geeglm,如果有任何空值,则会失败。创建子集解决了这个问题,但似乎无法根据变化的变量动态设置子集。

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 个答案:

答案 0 :(得分:1)

我建议:

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的值,但是使用显式测试可能更清楚。