我目前正在从事一个估算项目,需要评估估算方法。我有不完整的带有NA的数据框,据此我无法计算每个列/变量的丢失率。我的第二个数据帧包含我从第一个数据帧提取的完整案例。我现在想在包含完整案例的框架中模拟真实数据的缺失结构。如代码中所示,具有生成的NA的数据帧存储在对象“结果”中。如果我现在想复制此代码并因此生成100个不同的数据帧(如“结果”),该如何分别复制和保存它们?
我是一个初学者,非常感谢您的回答!
我试图将生成NA的循环放到另一个包含copy()命令并从1:100开始计数的循环中,并保存了这100个复制的数据帧,但这根本不起作用。
result = data.frame(res0=rep(NA, dim(comp_cas)[1]))
for (i in 1:length(Z32_miss_item$miss_per_item)) {
dat = comp_cas[,i]
missRate = Z32_miss_item$miss_per_item[i]
cat (i, " ", paste0(dat, collapse=",") ," ", missRate, "!\n")
df <- data.frame("res"= GenMiss(x=dat, missrate = missRate), stringsAsFactors = FALSE)
colnames(df) = gsub("res", paste0("Var", i), colnames(df))
result = cbind(result, df)
}
result = result[,-1]
我希望100次运行的每个数据帧都保存在我的项目文件夹中的一个单独的.rda文件中。
另外,如果您看看我发布的代码,是对r的初学者的归因和适用性评估,还是对我的熟练程度进行了评估?
答案 0 :(得分:0)
如果没有一些虚拟数据,很难猜测您到底在做什么。但是在循环中包含循环并保存data.frame是很好的。首先,我在这里避免使用replicate
函数,因为它的语法很奇怪,并且只使用普通循环。其次,您必须确保循环具有不同的索引(即for(i ...
应该用for(j ...
包围,因为函数可以在R中超出其范围。最后,请使用saveRDS
而不是而不是save
,因为您可以将每个对象(data.frame
)保存在单独的.rds
文件中。save
函数旨在保存整个工作区,以便您可以选择在你离开的地方。
fun <- function(i){
df <- data.frame(x=rnorm(5))
names(df) <- paste0("x",i)
df
}
for(j in 1:100){
res <- data.frame(id=1:5)
for(i in 1:10){
res <- cbind(res, fun(i))
}
saveRDS(res, sprintf("replication_%s.rds",j))
}