我正在处理一个数据集,它可以求解2个方程和2个未知数的简单方程组,但是,由于这样的方程组有数百个,我需要找到一些算法,也许是一个循环,来执行 Dataframe 中n行的任务。
考虑以下数据框:
df <- as.data.frame(rbind(c(1, 0.214527122, 166486.7605, 1, -0.003217907, 0),
c(1, 0.227828903, 160088.1385, 1, -0.003417434, 0),
c(1, 0.214324606, 154445.4132, 1, -0.003214869, 0),
c(1, 0.218698883, 147921.278, 1, -0.003280483, 0),
c(1, 0.201444364, 151268.6711, 1, -0.003021665, 0)))
colnames(df) = c("y1", "x1", "b1", "y2", "x2", "b2")
请注意,这个数据集中的每一行都包含两个线性方程,分别对应于两个未知数x和y。
> df
y1 x1 b1 y2 x2 b2
1 1 0.2145271 166486.8 1 -0.003217907 0
2 1 0.2278289 160088.1 1 -0.003417434 0
3 1 0.2143246 154445.4 1 -0.003214869 0
4 1 0.2186989 147921.3 1 -0.003280483 0
5 1 0.2014444 151268.7 1 -0.003021665 0
这两个方程代表经济模型中的供给和需求曲线。我想计算数据框架中每一行的最终均衡价格和数量。
例如,我可以用下面的代码求解第一行:
A <- rbind(c(df$y1[1], df$x1[1]),
c(df$y2[1], df$x2[1]))
B <- c(df$b1[1],df$b2[1])
> solve(A,B)
[1] 2460.396 764595.000
在均衡状态下,价格为2460.4,数量为764 595。然后,我可以将此结果添加到数据框中的两个新列中:
df$Price[1] <- solve(A,B)[1]
df$Quantity[1] <- solve(A,B)[2]
> df
y1 x1 b1 y2 x2 b2 Price Quantity
1 1 0.2145271 166486.8 1 -0.003217907 0 2460.396 764595
2 1 0.2278289 160088.1 1 -0.003417434 0 NA NA
3 1 0.2143246 154445.4 1 -0.003214869 0 NA NA
4 1 0.2186989 147921.3 1 -0.003280483 0 NA NA
5 1 0.2014444 151268.7 1 -0.003021665 0 NA NA
这是第一行,但我还没有找到一个好的方法来自动求解数据框中的每一行,我想某种类型的循环可能是一个选项,但我没有运气解决它。
3条答案
按热度按时间vdgimpew1#
重新排列列,使前4列为矩阵,然后运行以下
apply
:给予
tp5buhyn2#
一个
dplyr
选项输出:
jv2fixgn3#
要添加两个新列,请考虑
mapply
,按元素处理apply系列的成员: