如何根据列名动态构建线性模型?

时间:2016-12-19 21:03:17

标签: r

我有一个名为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中做到这一点吗?

1 个答案:

答案 0 :(得分:4)

您可以使用grepreformulate

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")