当前位置: 首页 > 知识库问答 >
问题:

使用一个数据帧中的值作为在另一个数据帧上估计的模型的参数

訾雅畅
2023-03-14

我希望在一个数据框中估计模型,但是每个模型的公式都有一些来自另一个数据框的“移动部分”。例如,假设我想估计以下模型(我不能发布图片,也没有办法输入乳胶方程):mpg=a+B*log(w_1*drat+w_2*hp)

library(tidyverse)
cars <- mtcars

w <- seq(from=0.5, to=1, by=0.5)
weights <- as_tibble(expand.grid(w1=w,w2=w))


#Doesn't work - the lm model is fit using the formula from the first row only
weights %>%
  mutate(formula_weights = paste0("mpg~log(",w1,"*drat+",w2,"*hp)")) %>%
  mutate(r2 = summary(lm(data=cars, formula = formula_weights))$r.squared)

#Does work - model is fit using the w1 and w2 values from each row (formula_weights)
weights %>%
  mutate(formula_weights = paste0("mpg~log(",w1,"*drat+",w2,"*hp)")) %>%
  group_by(formula_weights) %>%
  mutate(r2 = summary(lm(data=cars, formula = formula_weights))$r.squared)
# A tibble: 4 x 4
     w1    w2 formula_weights             r2
  <dbl> <dbl> <chr>                    <dbl>
1   0.5   0.5 mpg~log(0.5*drat+0.5*hp) 0.715
2   1     0.5 mpg~log(1*drat+0.5*hp)   0.715
3   0.5   1   mpg~log(0.5*drat+1*hp)   0.715
4   1     1   mpg~log(1*drat+1*hp)     0.715

group_by()的输出:

# A tibble: 4 x 4
# Groups:   formula_weights [4]
     w1    w2 formula_weights             r2
  <dbl> <dbl> <chr>                    <dbl>
1   0.5   0.5 mpg~log(0.5*drat+0.5*hp) 0.715
2   1     0.5 mpg~log(1*drat+0.5*hp)   0.709
3   0.5   1   mpg~log(0.5*drat+1*hp)   0.718
4   1     1   mpg~log(1*drat+1*hp)     0.715

共有1个答案

冯嘉珍
2023-03-14

我们可以按行方式添加

library(dplyr)
weights %>%
  mutate(formula_weights = paste0("mpg~log(",w1,"*drat+",w2,"*hp)")) %>% 
  rowwise() %>%
  mutate(r2 = summary(lm(data=cars, formula = formula_weights))$r.squared)
#Source: local data frame [4 x 4]
#Groups: <by row>

# A tibble: 4 x 4
#     w1    w2 formula_weights             r2
#  <dbl> <dbl> <chr>                    <dbl>
#1   0.5   0.5 mpg~log(0.5*drat+0.5*hp) 0.715
#2   1     0.5 mpg~log(1*drat+0.5*hp)   0.709
#3   0.5   1   mpg~log(0.5*drat+1*hp)   0.718
#4   1     1   mpg~log(1*drat+1*hp)     0.715

或使用映射

library(purrr)
weights %>%
     mutate(r2 = map_dbl(paste0("mpg~log(",w1,"*drat+",w2,"*hp)"), ~ 
                    summary(lm(data = cars, formula =  .x))$r.squared))
# A tibble: 4 x 3
#     w1    w2    r2
#   <dbl> <dbl> <dbl>
#1   0.5   0.5 0.715
#2   1     0.5 0.709
#3   0.5   1   0.718
#4   1     1   0.715
 类似资料:
  • 我有数据,其中因子标签已提供在单独的文件。因此,当我读到里面的东西时,我得到的数据如下所示: 和包含factor_x标签的单独数据帧,如下所示: 我正在寻找一种有效的方法来更新数据帧'data'中的factor_x_labels'中的标签。 我一直试图使用forcats包中的fct_recode或dplyr中的recode,但遇到了麻烦,因为(例如)现有的和更新的标签需要作为字符串粘贴,但需要用=

  • 我有两个Dataframes一个与日期集(df1)和另一个与emp_ids集(df2)。我试图创建一个新的Dataframe,这样df2中的每个emp_id都被标记为df1中的每个日期。 下面给出了我的数据帧的外观 df1 df2 预期产出: 我将日期列转换为字符串,并尝试执行以下操作,但返回的数据框为空 我尝试做

  • 我有两个数据帧df1和df2。df1就像一个具有以下值的字典 df2具有以下值: 我想基于df1数据帧中的,将df2拆分为3个新的数据帧。 日期,TLRA_权益栏应位于数据框 预期产出: > 数据帧 消费者,非周期性数据帧 请让我知道如何有效地做。我想做的是连接列名,例如,然后根据列名的前半部分分割数据帧。 代码: 但这很复杂。需要更好的解决方案。

  • 我相信这很简单,但找不到答案。我有一个数据帧df: 然后,我有另一个较小的数据框,其中包含单元格引用(行号和列号),引用df中应为空的特定单元格(即NA): 我如何用NA替换df中所有由cellRefs中的行和列引用引用的单元格?

  • 我有两个数据框,都包含英文和中文单词字符串,我想知道其中一个是另一个的子集:

  • 我有两个数据帧,它们的列名相同,但行数不同。第一个数据帧(a)看起来与此类似: 注:站点5、6、8和12故意丢失。 第二个数据帧(b)看起来像这样: 我想要实现的是: 在那里我注入(我肯定有一个更好的术语)数据帧b到数据帧a的数据,但是我想用零替换b中的任何NAs,并保持a中的NAs不变。 我发现并尝试了这个代码: 但它会带来NAs。我考虑先将NAs替换为零,但即使如此,它也会抹去我目前在数据帧a