我有一个像这样的 data.table:
dt <- data.table(asset=c("x1","x2","x3","x4","x5"),
min_s1=c(.1,NA,NA,.1,NA),
min_s2=c(NA,.5,.5,NA,NA),
min_s3=c(.15,NA,NA,NA,.15))
我可以手动对 NA 值进行子集,如下所示,这给了我想要的输出:
empty1 <- dt[is.na(min_s1)]
empty2 <- dt[is.na(min_s2)]
empty3 <- dt[is.na(min_s3)]
但是,我真正需要做的是使用列名动态设置子集,并将结果命名为在循环中包含 i 变量。循环很重要,因为它最终将用于并行计算脚本。我想要这样的东西(它不起作用;只是显示我正在寻找的东西):
foreach (i in 1:3) %do% {
empty(i) <- dt[is.na(min_s(i))]
}
我尝试使用以下及其许多变体无济于事:
paste0("empty",i) <- dt[is.na(paste0("min_s",i))]
任何想法我怎么能做到这一点?我使用的是 Windows 7 电脑。谢谢。
我们可以使用lapply
数据集和子集遍历“min”列
lapply(dt[,-1, with =FALSE], function(x) dt[is.na(x)])
#$min_s1
# asset min_s1 min_s2 min_s3
#1: x2 NA 0.5 NA
#2: x3 NA 0.5 NA
#3: x5 NA NA 0.15
#$min_s2
# asset min_s1 min_s2 min_s3
#1: x1 0.1 NA 0.15
#2: x4 0.1 NA NA
#3: x5 NA NA 0.15
#$min_s3
# asset min_s1 min_s2 min_s3
#1: x2 NA 0.5 NA
#2: x3 NA 0.5 NA
#3: x4 0.1 NA NA
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句