2015-03-19 139 views
0

我想知道是否有任何方法从列表中删除空白。 据我搜查,我发现有很多Q &至于从列表中删除整个元素,但找不到关于元素的特定组件的一个。R:从列表中删除空白

具体而言,该列表现在我看起来与工作是这样的:

[[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)] 

等,但似乎像““S [[1]]列表中仍然存在。

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

我已经使用“lapply”函数来运行特定命令到每个元素, ,它似乎像那些lapply命令都工作... 。

JY

+0

可能重复的[如何从字符向量列表中删除“](http://stackoverflow.com/questions/29038460/how-to-delete-from-a-list-of-character -vectors) – rawr 2015-03-19 12:49:48

回答

2

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

我想你可以在这里使用'!='来提高效率 – 2015-03-19 12:46:20

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" 
+0

当我重新阅读他们的问题时,我想知道他们是否有多于一个空格的空格。 +1这个替代虽然:-) – A5C1D2H2I1M1N2O1R2T1 2015-03-19 12:47:58

+0

@AnandaMahto谢谢。 :)如果我们有更多的信息,我们将能够提出精确的解决方案。 +1回给你。 – jazzurro 2015-03-19 12:50:42

+0

我很欣赏你的意见,thnx这么多!但只是想知道 - 你认为使用简单的乐句(例如text.word.ll [!lapply(text.words.ll,is.null)])的命令不适用于每一个单词? – prejay10 2015-03-19 13:08:36