首页 > 解决方案 > 循环数据帧行并使用未知参数编写函数

问题描述

我有一个如下图所示的数据框。

Index_1 Index_2 Constant Outcome
   1      3        5        1
   2      3        6        0
   1      4        7        1

我需要为数据框中的每一行写一个方程。这些方程最终将相乘以定义似然函数。我想创建如下所示的东西:

Index_1 Index_2 Constant Outcome Equation
   1      3        5        1      m_1 - m_3 + 5 + e_1
   2      3        6        0      m_2 - m_3 + 6 + e_2
   1      4        7        1      m_1 - m_4 + 7 + e_3

我可以让 R 使用以下代码打印出我需要的方程式:

for (row in 1:nrow(data)) {
  mu_a <- (paste("m_",data$Index_1[row],sep=""))
  mu_b <- (paste("m_",data$Index_2[row],sep=""))
  e_it <- (paste("e_", row,sep=""))
  print(paste(mu_a, paste("-",paste(mu_b,paste("+",paste(tradeoffs$d_lnxy[row], paste("+", e_it), sep = " "), sep = " "), sep = " "), sep = " "), sep = " "))
}

但是,这很麻烦,我希望每个 m_j 和 e_t 都是一个对象,因为这些是最大似然估计的参数。我想我需要使用apply,但我正在努力编写我需要的功能。

标签: rdataframeapply

解决方案


如何首先添加这样的索引:

data$Index <- row.names(data)

然后只需创建一个这样的粘贴方程:

data$Equation <- with(data,paste0("m_", Index_1, " - m_", Index_2, " + ", Constant, " + e_", Index))

你的结果:

 Index_1 Index_2 Constant Outcome Index Equation           
    <dbl>   <dbl>    <dbl>   <dbl> <chr> <chr>              
1       1       3        5       1 1     m_1 - m_3 + 5 + e_1
2       2       3        6       0 2     m_2 - m_3 + 6 + e_2
3       1       4        7       1 3     m_1 - m_4 + 7 + e_3

如果您需要分别引用方程中的每个项,您可以使用上面的 paste0() 函数创建任意数量的附加列。即,您可以创建一个名为“mu_a”的列,然后执行 paste0("m_", data$Index1)。然后,您可以使用此列和其他列(每列代表方程中的一个项)执行矢量化操作。


推荐阅读