R中的过滤列表,其中包含nchar> 1

时间:2016-09-21 03:45:32

标签: r

我有一个名单

> 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&gt;的列表1

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

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

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

2 个答案:

答案 0 :(得分: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大于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"