我有一个名为data的数据框,列名是:
c("Server", "Date", "Host_CPU", "Used_Mem_Perc", "JVM1", "JVM2",
"JVM3", "JVM4", "JVM5", "JVM6")
我需要能够在Host_CPU和以JVM开头的列名之间创建一个lm模型。在这个套装中,它将是这样的:
lm(data=data, Host_CPU~JVM1+JVM2+JVM3+JVM4+JVM5+JVM6)
但有时,我不知道从JVM开始会有多少列。我需要能够读取列名并构建lm模型。我有什么想法可以在R中做到这一点吗?
答案 0 :(得分:4)
您可以使用grep
和reformulate
。
reformulate(vars[grep("^JVM", vars)], vars[3])
Host_CPU ~ JVM1 + JVM2 + JVM3 + JVM4 + JVM5 + JVM6
所以
lm(reformulate(vars [grep(“^ JVM”,vars)],vars [3]),data = data)
数据强>
vars <- c("Server", "Date", "Host_CPU", "Used_Mem_Perc", "JVM1", "JVM2", "JVM3",
"JVM4", "JVM5", "JVM6")