R 如果缺少一组变量,则返回id号

R 如果缺少一组变量,则返回id号,r,R,如果我有一个大型数据库,包括一个“id”变量,我想列出所有感兴趣的变量,然后返回给我自己一个缺少每个特定变量的id列表 #Fake Data: set.seed(11100) missdata<-data.frame(id<-1:1000,C1<-sample(c(1,NA),1000,replace=TRUE,prob=c(.8,.2)), C2<-sample(c(1,NA),1000,replace=TRUE,prob=c(.8,.2))) names(missda

如果我有一个大型数据库,包括一个“id”变量,我想列出所有感兴趣的变量,然后返回给我自己一个缺少每个特定变量的id列表

#Fake Data:
set.seed(11100)
missdata<-data.frame(id<-1:1000,C1<-sample(c(1,NA),1000,replace=TRUE,prob=c(.8,.2)), C2<-sample(c(1,NA),1000,replace=TRUE,prob=c(.8,.2)))
names(missdata)<-c("id","v1","v2")


#One variable solution:
missdatatest<-subset(missdata, is.na(v1),select=id)
missdatatest[1:10,]
> missdatatest[1:10,]
[1]  5 30 44 47 48 49 57 65 68 74


#Looking to build a function...
FindMissings<-function(indata,varslist,printvar){
  printonevar<-function(var){
  missdatalist<-subset(indata, is.na(var),select=printvar)
  print(missdatalist)
}
lapply(vars,printonevar)
}


#Run function:
vars<-c("v1","v2")
FindMissings(missdata,vars,id)

#Error:
> FindMissings(missdata,vars,id)

 Error in `[.data.frame`(x, r, vars, drop = drop) : undefined columns selected 
#假数据:
种子集(11100)

missdata不需要这样的函数。只需使用
lappy

> lapply(missdata[-1], function(x) which(is.na(x)))
$v1
  [1]   5  30  44  47  48  49  57  65  68  74  89 103 107 110 115 119 152 167
 [19] 175 176 194 197 199 202 204 212 215 223 231 232 233 239 245 280 281 293...
<<SNIP>>

$v2
  [1]   3   6  18  19  22  23  27  28  33  38  41  50  51  55  60  66  68  77
 [19]  81  84  86  96  97  99 109 116 117 134 139 141 143 146 148 153 165 168...
<<SNIP>>

如果您关心的是如何对特定变量使用这种方法,那么它非常简单:

vars <- c("v1","v2")
lapply(missdata[vars], function(x) which(is.na(x)))

vars不需要这样的函数。只需使用
lappy

> lapply(missdata[-1], function(x) which(is.na(x)))
$v1
  [1]   5  30  44  47  48  49  57  65  68  74  89 103 107 110 115 119 152 167
 [19] 175 176 194 197 199 202 204 212 215 223 231 232 233 239 245 280 281 293...
<<SNIP>>

$v2
  [1]   3   6  18  19  22  23  27  28  33  38  41  50  51  55  60  66  68  77
 [19]  81  84  86  96  97  99 109 116 117 134 139 141 143 146 148 153 165 168...
<<SNIP>>

如果您关心的是如何对特定变量使用这种方法,那么它非常简单:

vars <- c("v1","v2")
lapply(missdata[vars], function(x) which(is.na(x)))

vars不需要这样的函数。只需使用
lappy

> lapply(missdata[-1], function(x) which(is.na(x)))
$v1
  [1]   5  30  44  47  48  49  57  65  68  74  89 103 107 110 115 119 152 167
 [19] 175 176 194 197 199 202 204 212 215 223 231 232 233 239 245 280 281 293...
<<SNIP>>

$v2
  [1]   3   6  18  19  22  23  27  28  33  38  41  50  51  55  60  66  68  77
 [19]  81  84  86  96  97  99 109 116 117 134 139 141 143 146 148 153 165 168...
<<SNIP>>

如果您关心的是如何对特定变量使用这种方法,那么它非常简单:

vars <- c("v1","v2")
lapply(missdata[vars], function(x) which(is.na(x)))

vars不需要这样的函数。只需使用
lappy

> lapply(missdata[-1], function(x) which(is.na(x)))
$v1
  [1]   5  30  44  47  48  49  57  65  68  74  89 103 107 110 115 119 152 167
 [19] 175 176 194 197 199 202 204 212 215 223 231 232 233 239 245 280 281 293...
<<SNIP>>

$v2
  [1]   3   6  18  19  22  23  27  28  33  38  41  50  51  55  60  66  68  77
 [19]  81  84  86  96  97  99 109 116 117 134 139 141 143 146 148 153 165 168...
<<SNIP>>

如果您关心的是如何对特定变量使用这种方法,那么它非常简单:

vars <- c("v1","v2")
lapply(missdata[vars], function(x) which(is.na(x)))

vars好吧,我想将每个变量的ID列表输出到一个单独的文档“finally”中,其中有一个特定于该变量的标题。这就是我知道如何做的事情,一旦我通过一些迭代过程为每一个单独的列表。我不知道在你展示的过程中我会怎么做。这似乎对所有变量都有影响。我只想执行一些变量IRL。@user2438475:您可以通过位置或名称轻松访问列表项。如果您将上面的输出存储为“out”,那么可以使用
out[[1]]
out[[v1]]]
获得“v1”的结果。我想将每个变量的ID列表“最终”输出到一个单独的文档中,并为该变量指定一个标题。这就是我知道如何做的事情,一旦我通过一些迭代过程为每一个单独的列表。我不知道在你展示的过程中我会怎么做。这似乎对所有变量都有影响。我只想执行一些变量IRL。@user2438475:您可以通过位置或名称轻松访问列表项。如果您将上面的输出存储为“out”,那么可以使用
out[[1]]
out[[v1]]]
获得“v1”的结果。我想将每个变量的ID列表“最终”输出到一个单独的文档中,并为该变量指定一个标题。这就是我知道如何做的事情,一旦我通过一些迭代过程为每一个单独的列表。我不知道在你展示的过程中我会怎么做。这似乎对所有变量都有影响。我只想执行一些变量IRL。@user2438475:您可以通过位置或名称轻松访问列表项。如果您将上面的输出存储为“out”,那么可以使用
out[[1]]
out[[v1]]]
获得“v1”的结果。我想将每个变量的ID列表“最终”输出到一个单独的文档中,并为该变量指定一个标题。这就是我知道如何做的事情,一旦我通过一些迭代过程为每一个单独的列表。我不知道在你展示的过程中我会怎么做。这似乎对所有变量都有影响。我只想执行一些变量IRL。@user2438475:您可以通过位置或名称轻松访问列表项。如果您已将上述输出存储为“out”,则可使用
out[[1]]
out[[v1]]]
获取“v1”的结果。