R 使用使用paste0和变量定义的列名的子集
我有一个data.table,如下所示:R 使用使用paste0和变量定义的列名的子集,r,parallel-processing,data.table,R,Parallel Processing,Data.table,我有一个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)) dt我希望我正确理解了你的问题,因此请尝试以下方法: dt <- data.t
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))
dt我希望我正确理解了你的问题,因此请尝试以下方法:
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))
vec_store <- c()
empty <- list()
names <- names(dt)[!grepl("asset", names(dt))]
for(i in names){
vec_store <- dt[is.na(dt[,get(i)])]
empty[[paste0(i)]] <- vec_store
}
在代码中,不能使用paste0(empty,i)
创建对象,我发现最简单的方法是创建一个空向量或data.table,然后将其存储在列表中。一旦它在列表中,您就可以对列表执行操作,或者单独将其从列表中拉出。这就是为什么我创建了vec_存储
一个空向量,以及empty
一个空列表
希望这会有所帮助。我们可以使用lappy
循环遍历“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
这很有效。谢谢你的帮助。Akrun的答案更简单,结果也一样。这是一个非常简单的代码。谢谢你在这方面的帮助,以及我所依赖的许多其他有用的答案!
paste0("empty",i) <- dt[is.na(paste0("min_s",i))]
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))
vec_store <- c()
empty <- list()
names <- names(dt)[!grepl("asset", names(dt))]
for(i in names){
vec_store <- dt[is.na(dt[,get(i)])]
empty[[paste0(i)]] <- vec_store
}
> empty
$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
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