我正在尝试创建一个将执行一系列分析的循环。我正在使用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
答案 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
的值,但是使用显式测试可能更清楚。