在列表的列中查找特定值

AL.*_*AL. 3 r dataframe

我试图让列表中的哪些对象在其中一列中具有特定值.

为了解释我的情况,请运行以下简单示例:

mtcars分成了一个列表

mt_list = split(mtcars, f = mtcars$cyl)
Run Code Online (Sandbox Code Playgroud)

如果我们看一下其中一个元素,我们会看到列"齿轮"

head(mt_list$`4`)

               mpg  cyl  disp hp drat    wt  qsec vs am gear carb
Datsun 710     22.8   4 108.0 93 3.85 2.320 18.61  1  1    4    1
Merc 240D      24.4   4 146.7 62 3.69 3.190 20.00  1  0    4    2
Merc 230       22.8   4 140.8 95 3.92 3.150 22.90  1  0    4    2
Fiat 128       32.4   4  78.7 66 4.08 2.200 19.47  1  1    4    1
Honda Civic    30.4   4  75.7 52 4.93 1.615 18.52  1  1    4    2
Toyota Corolla 33.9   4  71.1 65 4.22 1.835 19.90  1  1    4    1
Run Code Online (Sandbox Code Playgroud)

我想知道的是"齿轮"栏中哪些元素的值为"4".因此,它将搜索列表中的所有元素,在"gear"列中,如果找到值为5,则列出该元素.

所需的输出应为="4""6",您可以在列齿轮中找到值"4".(不在元素"8"中)

任何帮助将非常感激.

谢谢.

akr*_*run 5

我们可以遍历list,检查any'gear'列中是否有等于4的元素,使用它来对其进行子集nameslist

names(mt_list)[sapply(mt_list, function(x) any(x$gear == 4))]
#[1] "4" "6"
Run Code Online (Sandbox Code Playgroud)

或者用于%in%创建逻辑索引

names(mt_list)[sapply(mt_list, function(x) 4 %in% x$gear)]
#[1] "4" "6"
Run Code Online (Sandbox Code Playgroud)

  • @Albert在这种情况下将`x $ gear`(匿名函数调用或lamba函数)更改为`x [[grep("^ Car \\ d + \\.Gear $",name(x))]]` (2认同)