2013-07-26 15 views
4

我需要鍵入一個字符串向量。每個元素都是要在稍後循環中使用的變量名稱。這是在所有的引號和逗號鍵入一個痛苦 - 在那裏只需鍵入它像這樣的方式(這是我能在Stata做):R - 鍵入不帶引號的多個字符串

balance.vars <- c(a3 a4 a5_1 a5_2 a5_3 a6_1 a6_2 a6_3 a6_4 
a6_5 a6_6 a8 a8_1 a8_2 a8_3 a9 a9_3 
a10_1 a10_2 a10_3) 
etc. 

回答

3

您可以使用scantext

balance.vars <- scan(text='a3 a4 a5_1 a5_2 a5_3 a6_1 a6_2 a6_3 a6_4 
a6_5 a6_6 a8 a8_1 a8_2 a8_3 a9 a9_3 
a10_1 a10_2 a10_3',what='char') 

但我會避免使用很多這樣的分離變量。什麼不使用向量或列表?也許如果你更好地解釋你的工作流程,你想做什麼,我們可以提出更多的R型解決方案。

您還可以使用paste創建這樣的列表,例如:OP澄清後

paste(paste0('a',rep(3:10,each=3)),rep(0:3,8),sep='_') 

編輯,看來他要篩選data.frames變量。

varnames <- colnames(d)[grepl('^a[0-9]+(_[1-3])?',colnames(d))] 
formulas <- paste(varnames, "group", sep = " ~ ") 
res <- lapply(formulas, function(f) t.test(as.formula(f), data = d)) 
+0

我只是做一個平衡表 - 在一組變量基本運行t檢驗。我的解決方案需要一個變量名稱的向量: – Heisenberg

+0

varnames < - c(「var1」,「var2」)#這是 公式< - paste - lapply(公式,函數(f)t.test(as.formula(f),data = d)) – Heisenberg

+0

是的,但我需要選擇數據框中的一些但不是全部變量來運行t檢驗。因此,我不能僅僅排除「組」,並使用其餘的。變量名稱也來自現有調查,所以我無法像您所建議的那樣創建好的變量名稱。不過這是個好習慣。 – Heisenberg

2

R不支持這種風格函數調用。但是,如果你把所有的變量名在一個文本文件(每行一個),像這樣:

a3 
a4 
a5_1 
a6_1 
etc. 

那麼你可以這樣做:

balance.vars <- scan('varnames.txt', what='') 

,而不必輸入所有這些引號和逗號。

1

如何:

balance.vars <- unlist(strsplit("a3 a4 a5_1 a5_2 a5_3 a6_1 a6_2 a6_3 a6_4 a6_5 a6_6 a8 a8_1 a8_2 a8_3 a9 a9_3 a10_1 a10_2 a10_3", " ")) 

或:

balance.vars <- unlist(strsplit("a3 a4 a5_1 a5_2 a5_3 
a6_1 a6_2 a6_3 a6_4 a6_5 a6_6 a8 a8_1 a8_2 a8_3 a9 a9_3 
a10_1 a10_2 a10_3", "\\W", perl=TRUE)) 
如果你想使用換行符以提高可讀性

。 :-)

+0

我應該想到這個!基本的字符串操作,正是我所需要的。 – Heisenberg

0

使用qdap包:

library(qdap) 

qcv(terms="a3 a4 a5_1 a5_2 a5_3 a6_1 a6_2 a6_3 a6_4 
a6_5 a6_6 a8 a8_1 a8_2 a8_3 a9 a9_3 
a10_1 a10_2 a10_3") 
相關問題