Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
dplyr-使用使用其他列数据作为参数的函数进行变异?_R_Dplyr - Fatal编程技术网

dplyr-使用使用其他列数据作为参数的函数进行变异?

dplyr-使用使用其他列数据作为参数的函数进行变异?,r,dplyr,R,Dplyr,我有一个包含3个回归模型的列表,称为logregs。我的数据有一个名为type的列,其中只有整数1、2和3,用于决定应该使用logregs中的哪个回归模型,还有一个名为adstock的列,它是回归模型中唯一使用的自变量 我试着做一些类似的事情: dataframe%>%变异(概率=predict(logregs[[type]],type=“prediction”,newdata=adstock)) 示例数据帧: 结构(列表类型=c(3L,3L,3L,3L,3L,3L,3L),adstock=c

我有一个包含3个回归模型的列表,称为
logregs
。我的数据有一个名为
type
的列,其中只有整数1、2和3,用于决定应该使用
logregs
中的哪个回归模型,还有一个名为
adstock
的列,它是回归模型中唯一使用的自变量

我试着做一些类似的事情:

dataframe%>%变异(概率=predict(logregs[[type]],type=“prediction”,newdata=adstock))
示例数据帧:

结构(列表类型=c(3L,3L,3L,3L,3L,3L,3L),adstock=c(1.7984, 1.7984,2.7984,6.7984,6.5968,4.992),row.names=c(NA,6L ),class=“data.frame”) (不幸的是,
logregs
模型太大,无法在此进行dput)


使用dplyr如何实现这一点?

是的,但您需要在子集
日志记录方面更加小心,并在
新数据=
上使用
数据.frame

我将基于
mtcars
快速生成一组模型

库(dplyr)
型号%
分组依据(cyl=as.character(cyl))%>%
嵌套()%>%
变异(mdl=map(数据,~lm(mpg~disp,数据=.x)))%>%
排列(气缸)%>%
选择(气缸,mdl)%>%
碎片整理()
模型
# $`4`
#电话:
#lm(公式=mpg~disp,数据=0.x)
#系数:
#(截取)显示
#     40.8720      -0.1351  
# $`6`
#电话:
#lm(公式=mpg~disp,数据=0.x)
#系数:
#(截取)显示
#   19.081987     0.003605  
# $`8`
#电话:
#lm(公式=mpg~disp,数据=0.x)
#系数:
#(截取)显示
#    22.03280     -0.01963  
请注意,它们是根据气缸数的
字符
编制索引的,否则数字索引可能会混淆

让我们稍微修改一下mtcars$disp
并再次使用它:

set.seed(42)
mtcars%>%
变异(disp=disp+sample(20,size=n(),replace=TRUE)-10)%>%
组别组别组别组别组别组别组别组别组别组别组别组别组别组别组别组别组别组别组别组别组别组别组别组别组别组别组别组别组别组别组别
样本(2)
##tibble:6 x 11
##组别:共青团[3]
#mpg气缸显示hp drat wt qsec与am齿轮carb
#             
# 1  30.4     4  75.7    52  4.93  1.62  18.5     1     1     4     2
# 2  21.5     4 129.     97  3.7   2.46  20.0     1     0     3     1
# 3  21       6 169     110  3.9   2.62  16.5     0     1     4     4
# 4  19.2     6 173.    123  3.92  3.44  18.3     1     0     4     4
# 5  18.7     8 363     175  3.15  3.44  17.0     0     0     3     2
# 6  16.4     8 281.    180  3.07  4.07  17.4     0     0     3     3
您的
日志记录上的
[[
索引需要一个
类型
,但实际上您传递的是一个向量。由于我这里的数据仍然是分组的,所以我可以使用组变量(
cyl
)中的第一个,只需对每个组执行一次调用
预测

set.seed(42)
mtcars%>%
变异(disp=disp+sample(20,size=n(),replace=TRUE)-10)%>%
组别组别组别组别组别组别组别组别组别组别组别组别组别组别组别组别组别组别组别组别组别组别组别组别组别组别组别组别组别组别组别
样本n(2)%>%
突变(mpg2=predict(模型[[as.character(cyl)[1]]],newdata=data.frame(disp)))
##tibble:6 x 12
##组别:共青团[3]
#mpg气缸显示hp drat wt qsec与am齿轮carb mpg2
#              
# 1  30.4     4  75.7    52  4.93  1.62  18.5     1     1     4     2  30.6
# 2  21.5     4 129.     97  3.7   2.46  20.0     1     0     3     1  23.4
# 3  21       6 169     110  3.9   2.62  16.5     0     1     4     4  19.7
# 4  19.2     6 173.    123  3.92  3.44  18.3     1     0     4     4  19.7
# 5  18.7     8 363     175  3.15  3.44  17.0     0     0     3     2  14.9
# 6  16.4     8 281.    180  3.07  4.07  17.4     0     0     3     3  16.5
如果您不想(或不能)分组,则需要每行运行一个预测。这是非常昂贵的,因为它使用单个
newdata=
参数运行
predict
,但…它仍然有效。为此,我们将
map
它:

library(purrr)#map*函数
种子(42)
mtcars%>%
变异(disp=disp+sample(20,size=n(),replace=TRUE)-10)%>%
组别组别组别组别组别组别组别组别组别组别组别组别组别组别组别组别组别组别组别组别组别组别组别组别组别组别组别组别组别组别组别
样本n(2)%>%
解组()%>%
变异(mpg2=map2_dbl(cyl,disp,~predict(models[[as.character(.x)]),newdata=data.frame(disp=.y)))
##tibble:6 x 12
#mpg气缸显示hp drat wt qsec与am齿轮carb mpg2
#              
# 1  30.4     4  75.7    52  4.93  1.62  18.5     1     1     4     2  30.6
# 2  21.5     4 129.     97  3.7   2.46  20.0     1     0     3     1  23.4
# 3  21       6 169     110  3.9   2.62  16.5     0     1     4     4  19.7
# 4  19.2     6 173.    123  3.92  3.44  18.3     1     0     4     4  19.7
# 5  18.7     8 363     175  3.15  3.44  17.0     0     0     3     2  14.9
# 6  16.4     8 281.    180  3.07  4.07  17.4     0     0     3     3  16.5

请注意,我必须为
newdata=data.frame(disp=.y)
的列命名:以前我们这样做时,
data.frame(disp)
将其命名为导入变量的名称。在这种情况下,模型不知道
.y
,因此我们必须显式地命名它。

是的,但是您需要在子集
logregs
上更加小心,并在
newdata=
上使用
data.frame

我将基于
mtcars
快速生成一组模型

库(dplyr)
型号%
分组依据(cyl=as.character(cyl))%>%
嵌套()%>%
变异(mdl=map(数据,~lm(mpg~disp,数据=.x)))%>%
排列(气缸)%>%
选择(气缸,mdl)%>%
碎片整理()
模型
# $`4`
#电话:
#lm(公式=mpg~disp,数据=0.x)
#系数:
#(截取)显示
#     40.8720      -0.1351  
# $`6`
#电话:
#lm(公式=mpg~disp,数据=0.x)
#系数:
#(截取)显示
#   19.081987     0.003605  
# $`8`
#电话:
#lm(公式=mpg~disp,数据=0.x)
#系数:
#(截取)显示
#    22.03280     -0.01963  
请注意,它们是在t上索引的