删除元素包含字符串的列表行

时间:2017-06-07 15:25:33

标签: r

我有一个列表,其中所有列都具有相同的长度,

ll<-list("a"=c(1:5),
         "b"=c(1:5)*10,
         "c"="one","two","three","four","five")

我想删除ll$c=="one"所有的行。对于数据框,我可以使用ll[- grep("one", ll$c),],但这对列表不起作用。

有没有办法将方法概括为列表工作?

1 个答案:

答案 0 :(得分:2)

如果列表中的所有元素长度相同,那么您可能应该使用data.frame。但是,假设您要删除每个列表元素中与ll$c == "one"的位置对应的元素,您可以使用以下lapply

lapply(ll, "[", ll$c != "one")
$a
[1] 2 3 4 5

$b
[1] 20 30 40 50

$c
[1] "two"   "three" "four"  "five"

第二个参数表示子集或提取函数,参见?&#34; [&#34;第三个参数用于向子集化函数提供与ll$c(以及其余列表元素)长度相同的逻辑向量。

如果列表元素很多,那么最初计算逻辑向量然后重复引用它会更有效。

keepers <- ll$c != "one"
lapply(ll, "[", keepers)

数据

ll <-
structure(list(a = 1:5, b = c(10, 20, 30, 40, 50), c = c("one", 
"two", "three", "four", "five")), .Names = c("a", "b", "c"))