【问题标题】:how do you dynamically build a liner model based on column names? [duplicate]如何根据列名动态构建线性模型? [复制]
【发布时间】:2016-12-19 21:03:17
【问题描述】:

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

【问题讨论】:

  • 类似as.formula(paste0("Host_CPU", "~", paste(nm[startsWith(nm, "JVM")], collapse = "+"))),其中nm 是名称
  • 查看reformulate() 函数以帮助构建公式。例如:x<-c("Server", "Date", "Host_CPU", "Used_Mem_Perc", "JVM1", "JVM2", "JVM3", "JVM4", "JVM5", "JVM6"); reformulate(grep("^JVM", x, value=T), "Host_CUP")

标签: r


【解决方案1】:

您可以使用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")

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-02-15
    • 2015-10-26
    • 1970-01-01
    • 1970-01-01
    • 2017-04-29
    • 2017-02-27
    • 2011-07-18
    • 1970-01-01
    相关资源
    最近更新 更多