2016-09-21 29 views
0

我有名字過濾列表,它具有的nchar> 1

> x <- c("Test t", "Cuma Nama K", "O", "Test satu dua t") 
> name <- strsplit(x, " ") 
> name 
[[1]] 
[1] "Test" "t" 

[[2]] 
[1] "Cuma" "Nama" "K" 

[[3]] 
[1] "O" 

[[4]] 
[1] "Test" "satu" "dua" "t" 

如何過濾列表,以便它可以成爲這樣的名單? 我試圖找出如何篩選具有列表中的nchar> 1

> name 
[[1]] 
[1] "Test" 

[[2]] 
[1] "Cuma" "Nama" 

[[4]] 
[1] "Test" "satu" "dua" 

回答

2
lapply(name, function(x) x[nchar(x)>1]) 

結果:

[[1]] 
[1] "Test" 

[[2]] 
[1] "Cuma" "Nama" 

[[3]] 
character(0) 

[[4]] 
[1] "Test" "satu" "dua" 
1

我們可以遍歷列表元素,子集,它具有大於1 nchar的元素,並使用Filter移除0元素元素

Filter(length,lapply(name, function(x) x[nchar(x) >1 ])) 
#[[1]] 
#[1] "Test" 

#[[2]] 
#[1] "Cuma" "Nama" 

#[[3]] 
#[1] "Test" "satu" "dua" 

如果我們想從字符串一個字符去掉的話,我們也能做到這一點,不要把

setdiff(gsub("(^|).(|$)", "", x), "") 
#[1] "Test"   "Cuma Nama"  "Test satu dua"