Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/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
对R'中的每个插补数据集执行操作;s老鼠_R_R Mice - Fatal编程技术网

对R'中的每个插补数据集执行操作;s老鼠

对R'中的每个插补数据集执行操作;s老鼠,r,r-mice,R,R Mice,我如何对R的packagemice中类为mids的对象中的每个插补数据集执行操作(如子集设置或添加计算列)?我希望结果仍然是mids对象 编辑:示例 library(mice) data(nhanes) # create imputed datasets imput = mice(nhanes) 插补数据集存储为列表列表 imput$imp 其中,只有对给定变量进行插补的观测数据行 原始(不完整)数据集存储在此处: imput$data 例如,我如何在每个插补数据集中创建一个新的变量,计

我如何对R的package
mice
中类为
mids
的对象中的每个插补数据集执行操作(如子集设置或添加计算列)?我希望结果仍然是
mids
对象

编辑:示例

library(mice)
data(nhanes)

# create imputed datasets
imput = mice(nhanes)
插补数据集存储为列表列表

imput$imp
其中,只有对给定变量进行插补的观测数据行

原始(不完整)数据集存储在此处:

imput$data

例如,我如何在每个插补数据集中创建一个新的变量,计算为
chl/2
,从而生成一个新的
mids
对象?

这里有一个
重载可以帮助您

with(imput, chl/2)

文档见
?with.mids

另一个选项是在插补前计算变量并对其进行限制

库(鼠标)
#创建附加变量-此变量将丢失

nhanes$extra这可以通过以下方式轻松完成-

使用
complete()
将mids对象转换为长格式data.frame:

 long1 <- complete(midsobj1, action='long', include=TRUE)
现在,您可以根据需要使用
midsobj2
。请注意,
as.mids()
需要
include=TRUE
(用于包含缺少值的原始数据)来正确压缩长格式数据。注意,在mice v2.25之前,as.mids()函数中有一个bug(参见本文)

编辑:根据这个答案(本质上是一个重复的问题),您还可以通过访问$data和$imp直接编辑mids对象

 midsobj2<-midsobj1
 midsobj2$data$new.var <- midsobj2$data$chl/2
 midsobj2$imp$new.var <- midsobj2$imp$chl/2

midsobj2在
basecamb
包中有一个用于此的函数:

library(basecamb)
apply_function_to_imputed_data(mids_object, function)

如果您花时间创建一个,这样我们就可以提供特定的代码建议,这会更容易。这有点过于宽泛和不具体。@user20650,它确实将原始数据集存储在
imput$data
中,但它与插补数据集是分开的。我刚刚添加了一个例子。如果你想生成
chl/2
,你可以在插补之前计算。而在进行插补时,您添加了一个限制,即当此列的任何缺失插补等于
chl/2
谢谢。但是有没有一种方法可以使用它来实际修改每个插补数据集,例如通过添加计算列<代码>with(input,function(x)x$imp$new.var=chl/2)
不起作用,可能是因为格式错误。为什么需要这样做<代码>with()
不适用于分配。但是您使用
with()
运行的任何东西都可以进行转换。看来
as.mids
中的错误可能已在最新版本的mice(2.252015-11-09)中得到纠正。这对您有用吗?因为在使用
as.mids
之后,我得到了一些奇怪的结果。详情如下:
 midsobj2<-midsobj1
 midsobj2$data$new.var <- midsobj2$data$chl/2
 midsobj2$imp$new.var <- midsobj2$imp$chl/2
library(basecamb)
apply_function_to_imputed_data(mids_object, function)