如何使用字符名称从R中的data.frame中提取数据?

时间:2018-04-16 20:50:02

标签: r dataframe

我想知道为什么我的代码的第一个版本(pred)工作正常,但第二个版本不能正常工作?

我知道问题在于使用g <- names(fit$model)[2]在第二个版本中生成"hp"而不是hp。但我想知道如何让第二个版本像第一个版本一样正常工作吗?

library(rstanarm)
fit <- stan_glm(mpg ~ hp, data = mtcars)

pred <- posterior_predict(fit, newdata = data.frame(hp = 93))   # Works OK![FIRST Version]

g <- names(fit$model)[2]
pred <- posterior_predict(fit, newdata = data.frame(g = 93)) # Does not work! [SECOND Version]

2 个答案:

答案 0 :(得分:1)

您需要将该数据列的名称设置为g的值; setNames将在一行中执行,否则您可以为新数据框创建临时变量并使用names

pred <- posterior_predict(fit, newdata = setNames(data.frame(tmp = 93), g))

tmp <- data.frame(tmp = 93)
names(tmp) <- g
pred <- posterior_predict(fit, newdata = tmp)

答案 1 :(得分:1)

如果我们使用tidyverse方式,则可以使字符串对象指定(:=)作为列名

library(dplyr)
tibble(!! g := 93) %>% 
# or
# data_frame(!! g := 93) %>% 
     posterior_predict(fit, newdata = .)

- 用@ Aaron的方法检查答案

set.seed(24)
pred2 <- tibble(!! g := 93) %>%
                posterior_predict(fit, newdata = .)
set.seed(24)
pred <-  posterior_predict(fit, newdata = setNames(data.frame(tmp = 93), g))
identicalpred, pred2)
#[1] TRUE