【问题标题】:R: Convert summary()$coef into numeric vectorR:将 summary()$coef 转换为数值向量
【发布时间】:2020-11-27 11:39:04
【问题描述】:

我正在尝试使用标准曲线(回归线)来分析我的数据。标准曲线与此类似:

 myData <- data.frame(x=rep(c(10,1,0.1,0.01),each=3),
                          y=(c(26, 25, 24.5,2.65,2.4,2.5,
                               0.25,0.245,0.265, 0.025,0.027,0.024)))

当我使用函数 lm() 获取回归线,然后使用 coef 接收系数时,这可以正常工作。但是,当我尝试将输出转换为可以在以后的代码中重用的数字向量时,值会从原来的值变为 1 和 2。我做错了什么?感谢您的帮助!

xy <- lm(y~x, data=myData) #Intercept(y) = 0.000653277183897452; x = 2.51659647986179 
datOut <- summary(xy)$coef
PPL <- cbind(VariableName=rownames(datOut), datOut)

ppl<-as.data.frame(PPL)
#Results look great

ppl$Estimate<-as.numeric(ppl$Estimate)
#Estimate column content changes to 1 and 2

【问题讨论】:

    标签: r lm coefficients


    【解决方案1】:

    ppl$Estimate 最初是一个因素。如果将其直接转换为数字,它将提供因子的级别(因此为 1、2...)。您必须先将其转换为字符:

    ppl$Estimate<-as.numeric(as.character(ppl$Estimate))
    

    或如 27 φ 9 所述,在初始化数据框时使用 stringsAsFactors = FALSE

    【讨论】:

      【解决方案2】:

      永远不要使用cbind 后跟as.data.framecbind 更改了数据类型,因为它创建了一个矩阵,而一个矩阵只能包含一种数据类型。只需使用data.frame,之后您就无需“修复”数据类型:

      set.seed(42)
      xy <- lm(y~x, data=data.frame(x = rnorm(10), y = rnorm(10))) 
      datOut <- summary(xy)$coef
      
      ppl <- data.frame(VariableName=rownames(datOut), datOut)
      str(ppl)
      #'data.frame':  2 obs. of  5 variables:
      #$ VariableName: chr  "(Intercept)" "x"
      #$ Estimate    : num  0.237 -0.732
      #$ Std..Error  : num  0.616 0.64
      #$ t.value     : num  0.385 -1.144
      #$ Pr...t..    : num  0.71 0.286
      

      【讨论】:

      • 感谢您的回答和 cbind 提示。当我试图找到解决方案时,我在某个地方找到了它。下次,我会知道的:)
      猜你喜欢
      • 2012-07-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-07
      • 1970-01-01
      相关资源
      最近更新 更多