【问题标题】:Find specific value in a column of a list在列表的列中查找特定值
【发布时间】:2018-10-01 18:13:29
【问题描述】:

我正在尝试获取列表中的哪些对象在它们的列中具有特定值。

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

mtcars 拆分成一个列表

mt_list = split(mtcars, f = mtcars$cyl)

如果我们查看其中一个元素,我们会看到“齿轮”列

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

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

所需的输出应该是 = "4" "6" ,您可以在列齿轮中找到值“4”。 (不存在于元素“8”中)

任何帮助将不胜感激。

谢谢。

【问题讨论】:

    标签: r dataframe


    【解决方案1】:

    我们可以遍历list,检查'gear'列中是否有any元素等于4,用它来子集listnames

    names(mt_list)[sapply(mt_list, function(x) any(x$gear == 4))]
    #[1] "4" "6"
    

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

    names(mt_list)[sapply(mt_list, function(x) 4 %in% x$gear)]
    #[1] "4" "6"
    

    【讨论】:

    • 完美运行。最后一个问题,如果不是列“Gear”,名称是“Car1.Gear”、“Car2.Gear”、“Car3.Gear”等,等等,所以他们共享“.Gear”谢谢。
    • @Albert 在这种情况下,将x$gear(匿名函数调用或lamba 函数)更改为x[[grep("^Car\\d+\\.Gear$", names(x))]]
    猜你喜欢
    • 2017-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-05
    • 2017-11-12
    • 1970-01-01
    相关资源
    最近更新 更多