我做了一些线性回归,我想预测超过一定值的时刻。
这意味着我有三列:
a= slope
b = intercept
c = target value
在我要计算的每一行上
solve(a,(c-b))
如何在不使用循环的情况下以高效的方式执行此操作(它是一个广泛的数据集)?
答案 0 :(得分:1)
所以你基本上想要解决这个等式
c = a*x + b
每行x
?
x = (c-b)/a
这是R中的向量化操作。无需循环
dd <- data.frame(
a = 1:5,
b = -2:2,
c = 10:14
)
transform(dd, solution=(c-b)/a)
# a b c solution
# 1 1 -2 10 12.0
# 2 2 -1 11 6.0
# 3 3 0 12 4.0
# 4 4 1 13 3.0
# 5 5 2 14 2.4
答案 1 :(得分:1)
除了上述回复之外,您还可以使用mutate
中的tidyverse
功能。像这样:
library(magrittr)
library(tidyverse)
dataframe %<>% mutate(prediction=solve(a,(c-b))
在这个例子中,我们假设列'a','b'和'c'在一个名为'dataframe'的表中。然后,我们使用%<>%
库中的magrittr
函数来说“将后面的函数应用于数据框”。
答案 2 :(得分:0)
以下是使用Vectorize
函数的简单方法:
solve_vec <- Vectorize(solve)
solve_vec(d$a, d$c - d$b)
> solve_vec(d$a, d$c - d$b)
[1] 12.0 6.0 4.0 3.0 2.4