R:删除列表中列表中的空列

时间:2018-04-11 07:33:53

标签: r list

当列为""时,如何从R中列表中的列表中删除空列?还是NA?

示例数据:

x <- list( a = cars , b = ability.cov , d = mtcars )
x[[3]][2]<-""

所以第三个列表中的第二列现在全部是&#34;&#34;,我希望将其从x中删除

编辑:问题是我不知道哪个列在列表中(列表内)是空的。我需要一些算法

我已尝试过以下哪项对我不起作用:

 x<-x[,colSums(x!= "") != 0 ]

1 个答案:

答案 0 :(得分:2)

删除所有仅包含值&#34的列;&#34;从列表中的数据框中可以做到:

xii

解释:

  • 如果您有一个向量xii,则可以针对&#34;&#34;进行测试,这会给出一个逻辑向量,其长度与all(...)相同。
  • sapply(xi, ...)很明确:如果所有元素都为TRUE,则结果为TRUE
  • xi正在为xi的每列计算此值。它 对xi[!sapply()]
  • 的每列赋予TRUE或FALSE
  • sapply()xi中的逻辑向量反转并使用 它作为lapply(x, ...)的索引。如果索引的一个元素为FALSE,则 结果中忽略了列。
  • xnew <- lapply(...)正在原始列表中运行

不要忘记将结果存储在对象中! lapply(x, function(xi) xi[!sapply(xi, function(xii) all(xii=="" | is.na(xii)))])

如果您想删除仅包含NA和&#34;&#34;的列作为价值观:

{{1}}