繁体   English   中英

R:从列表中删除空白

[英]R: Removing blanks from the list

我想知道是否有任何方法可以从列表中删除空白。 据我搜索,我发现有很多关于从列表中删除整个元素的问答,但是找不到与该元素的特定组成部分有关的问答。

具体来说,我现在正在使用的列表如下所示:

[[1]]
[1] "1" ""  ""  "2" ""  ""  "3"

[[2]]
[1] "weak"

[[3]]
[1] "22" "33"

[[4]]
[1] "44"  "34p" "45" 

从上方可以找到“”,应将其删除。 我尝试了不同的命令,例如

text.words.bl <- text.words.ll[-which(text.words.ll==" ")]
text.words.bl <- text.words.ll[!sapply(text.words.ll, is.null)]

等等,但似乎列表[[1]]中的“”仍然保留。

不可能对列表的每个元素中的小块应用命令吗? (例如1、2,弱,22、33 ...)

我已经使用“ lapply”功能对每个元素运行特定的命令,而且看起来这些lapply命令都可以正常工作。

Y

使用%in% ,但用否定它!

## Sample data:
L <- list(c(1, 2, "", "", 4), c(1, "", "", 2), c("", "", 3))
L
# [[1]]
# [1] "1" "2" ""  ""  "4"
# 
# [[2]]
# [1] "1" ""  ""  "2"
# 
# [[3]]
# [1] ""  ""  "3"

更换:

lapply(L, function(x) x[!x %in% ""])
# [[1]]
# [1] "1" "2" "4"
# 
# [[2]]
# [1] "1" "2"
# 
# [[3]]
# [1] "3"

显然,如果要覆盖原始数据集,请将输出分配给“ L”:

L[] <- lapply(L, function(x) x[!x %in% ""])

另一种方法是使用nchar() 我从@Ananda Mahto借来了L

lapply(L, function(x) x[nchar(x) >= 1])

#[[1]]
#[1] "1" "2" "4"
#
#[[2]]
#[1] "1" "2"
#
#[[3]]
#[1] "3"

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM