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

R 删除元素包含字符串的列表行,r,R,我有一个列表,其中所有列的长度都相同 ll<-list("a"=c(1:5), "b"=c(1:5)*10, "c"="one","two","three","four","five") ll如果列表中的所有元素长度相同,那么可能应该使用data.frame。但是,假设要删除每个列表元素中与ll$c==“one”位置相对应的元素,可以使用以下lappy lapply(ll, "[", ll$c != "one") $a [1] 2 3 4 5 $b

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

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

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

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

$b
[1] 20 30 40 50

$c
[1] "two"   "three" "four"  "five"
第二个参数表示子集或提取函数,请参见?[”,第三个参数用于向子集函数提供与
ll$c
长度相同的逻辑向量(以及其他列表元素)

如果有许多列表元素,则首先计算一次逻辑向量,然后重复引用它会更有效

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

keepers在一个列表中,引用“行”是不明确的;您可能意味着去掉
c
的第一个元素,或者完全去掉
c
。您应该真正提供您想要的结果。您的
c
格式不正确,您需要
c=c(“一”、“二”…))
。更正了输入错误,并将其包装在as.data.frame中,我想您的代码可以正常工作,
grep
是危险的,因为
-c()
,一个空的grep,将为您提供错误的子集。
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"))