按数字在dataframe中寻址列

按数字在dataframe中寻址列,r,R,有一个包含3列的数据帧(y和2个预测器)。可以对列进行寻址,例如使用高度$df1或df1[,2]。同样的结果。两者都是向量(is.vector)。在某些情况下,与confint等公式组合时,输出是不同的 此代码提供正确的结果: confint(lm(df1[,1] ~ height, data=df1), "height") 这一个不起作用,它以NA值结束: confint(lm(earning ~ df1[, 2], data=df1), "height") 希望使用列号来处理数据帧,如d

有一个包含3列的数据帧(y和2个预测器)。可以对列进行寻址,例如使用
高度$df1
df1[,2]
。同样的结果。两者都是向量(
is.vector
)。在某些情况下,与
confint
等公式组合时,输出是不同的

此代码提供正确的结果:

confint(lm(df1[,1] ~ height, data=df1), "height")
这一个不起作用,它以
NA
值结束:

confint(lm(earning ~ df1[, 2], data=df1), "height")
希望使用列号来处理数据帧,如
df1[,2]
。正确的方法是什么?
感谢您的帮助。

一个选项是使用
粘贴创建公式,它应该可以工作

confint(lm(paste0('earning ~ ', names(df1)[2]), data = df1), "height")
使用一个小的可重复的例子

data(mtcars)
fit <- lm(mpg ~ mtcars[,6], data = mtcars)
confint(fit, 'wt')
#   2.5 % 97.5 %
#wt    NA     NA
fit <- lm(paste0('mpg ~', names(mtcars)[6]), data = mtcars)
confint(fit, 'wt')
#       2.5 %    97.5 %
#wt -6.486308 -4.202635
数据(mtcars)

拟合我们可以使用
重新制定
来创建公式:

confint(lm(reformulate(names(df1)[2], "earning"), df1), 'height')
mtcars
为例:

confint(lm(reformulate(names(mtcars)[6], "mpg"), mtcars), 'wt')

#       2.5 %    97.5 %
#wt -6.486308 -4.202635

它起作用了。以及如何与mpg,resp一起实现。也赚钱?用数字来处理所有向量。。。在我的例子中,“收入”也是如此。类似于:
confint(lm(names(df1)[1]~names(df1)[2],data=df1),“height”)
谢谢。@Eli3只需做
confint(lm(paste0(names(df1)[1],“~”,names(df1)[2]),data=df1),“height”)
\akrun:谢谢你,它能工作。你能解释一下为什么它是这样工作的,而不是我的尝试df1[,2]?@Eli3在你的尝试中,用术语创建的属性是
df1[,2]
,而不是列名,因此它与列名不匹配,以及如何使用更多变量,如:mpg~wt+hp?@Eli3
confint(lm(重新格式化(名称(mtcars)[c(4,6)],“mpg”),“mtcars”),“wt”)
如下所示。