Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/64.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 使用使用paste0和变量定义的列名的子集_R_Parallel Processing_Data.table - Fatal编程技术网

R 使用使用paste0和变量定义的列名的子集

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

我有一个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.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