我想知道是否有办法从列表中删除空格。 就我的搜索而言,我发现有很多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
答案 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"