2010-05-07 58 views
2

我正在使用具有非常相似名稱的變量的數據集。我必須一次對13個變量應用相同的函數,而我試圖縮短代碼,而不是單獨執行每個變量。在R中創建一個循環以將相同的函數應用於許多具有相似名稱的變量

q01a.F=factor(q01a) 
q01b.F=factor(q01b) 
q01c.F=factor(q01c) 
q01d.F=factor(q01d) 
q01e.F=factor(q01e) 
q01f.F=factor(q01f) 
q01g.F=factor(q01g) 
q01h.F=factor(q01h) 
q01i.F=factor(q01i) 
q01j.F=factor(q01j) 
q01k.F=factor(q01k) 
q01l.F=factor(q01l) 
q01m.F=factor(q01m) 

建議?

回答

4
## suppose dnow is the data.frame with your variables of interest 
dnow <- data.frame(q01a=rep(1,10), q01b=rep(2,10), q01c=rep(3,10), q02=rlnorm(10)) 
## we need to extract the variable names we need 
## (they start with q01 and end with a, b or c 
## dnow is your data.frame 
vnames <- grep("^q01[a-c]", names(dnow), value=TRUE) ## regular expression matching the names 
for (i in vnames) { 
    dnow[,paste(i, ".F", sep='')] <- factor(dnow[,i]) 
} 
+0

謝謝!我正在解決這個問題。 vnames應該是data.frame中那些變量名稱(q01_a ...)所引用的列的向量嗎? – Michael 2010-05-07 23:35:57

+0

>爲(i的vnames){ + UNCA [,糊(I 「.F」,月= '')] < - 因子(UNCA [,I]) 錯誤: :在意想不到的輸入 「(我的名字){ ← – Michael 2010-05-07 23:55:49

+0

@ user335897我的代碼有錯誤。我忘了將「value = TRUE」添加到grep語句中,所以它給了我們列名而不是名稱。現在應該工作。 – 2010-05-08 03:58:32

1

這聽起來像你剛剛從這裏開始,所以一般的提示。爲了與提供的解決方案一起工作,您應該明智地將其解包。名字(dnow)有結果,請看它自己。 grep(「^ q01 [a-m]」,names(dnow))也有一個結果,你應該自己看看。這些可能都在不同的行,並保存在其他變量,以防您需要使其更具可讀性。

相關問題