R:从列表中删除空格

时间:2015-03-19 12:35:31

标签: r

我想知道是否有办法从列表中删除空格。 就我的搜索而言,我发现有很多Q&至于删除 列表中的整个元素,但找不到有关的元素 元素的特定组成部分。

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

[[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]]中的“s”仍然存在。

是否无法将命令应用于列表中每个元素的小块? (例如,分别为1,2,弱,22,33 ......)

我使用“lapply”函数对每个元素运行特定命令, 似乎那些lapply命令都起作用了......

JY

2 个答案:

答案 0 :(得分:4)

使用%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% ""])

答案 1 :(得分:3)

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

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

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