我需要鍵入一個字符串向量。每個元素都是要在稍後循環中使用的變量名稱。這是在所有的引號和逗號鍵入一個痛苦 - 在那裏只需鍵入它像這樣的方式(這是我能在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.
我需要鍵入一個字符串向量。每個元素都是要在稍後循環中使用的變量名稱。這是在所有的引號和逗號鍵入一個痛苦 - 在那裏只需鍵入它像這樣的方式(這是我能在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.
您可以使用scan
與text
:
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))
R不支持這種風格函數調用。但是,如果你把所有的變量名在一個文本文件(每行一個),像這樣:
a3
a4
a5_1
a6_1
etc.
那麼你可以這樣做:
balance.vars <- scan('varnames.txt', what='')
,而不必輸入所有這些引號和逗號。
如何:
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))
如果你想使用換行符以提高可讀性
。 :-)
我應該想到這個!基本的字符串操作,正是我所需要的。 – Heisenberg
使用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")
我只是做一個平衡表 - 在一組變量基本運行t檢驗。我的解決方案需要一個變量名稱的向量: – Heisenberg
varnames < - c(「var1」,「var2」)#這是 公式< - paste - lapply(公式,函數(f)t.test(as.formula(f),data = d)) – Heisenberg
是的,但我需要選擇數據框中的一些但不是全部變量來運行t檢驗。因此,我不能僅僅排除「組」,並使用其餘的。變量名稱也來自現有調查,所以我無法像您所建議的那樣創建好的變量名稱。不過這是個好習慣。 – Heisenberg