2016-09-21 2 views
0

У меня есть список именфильтр в R, который имеет 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

Мы можем цикл по элементам списка, подмножество элементов, которые имеют nchar больше 1 и использовать 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" 
Смежные вопросы