2012-01-21 50 views
2

我正在嘗試創建一個將執行一系列分析的循環。我使用geepack中的geeglm,如果有任何空值,則失敗。創建子集解決了這個問題,但似乎無法根據變化的變量動態設置子集。R - 使用變量創建子集數據框

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

請不要在這裏和r-help郵件列表上交叉發帖:它會導致多餘的努力... –

回答

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()有一個怪癖,它會降低測試結果爲FALSENA的值,但它可能更清晰地使用顯式測試。

+0

我試過了,沒有錯誤,但實際上並沒有創建子集數據集。我需要根據過濾器來減少data.frame的尺寸,否則分析將失敗。 – user1162769

+0

可重現的例子嗎? http://tinyurl.com/reproducible-000 –

+0

我把上面的代碼 – user1162769

相關問題