r - 如何检查列表列表的元素是否符合条件?

标签 r list match

我有一个列表列表:

  pairs <- list(
    list(Name="A",Value=11), 
    list(Name="B",Value=17), 
    list(Name="C",Value=23)
  )
我如何检查 pairs列表包含名称==“A”的元素?
我也想得到那个元素。

最佳答案

如果你只是想知道是否有任何列表组件有 Name=='A' :

any(sapply(pairs,function(x) x$Name=='A'));
## [1] TRUE

如果您想要具有 Name=='A' 的列表组件的数量:
sum(sapply(pairs,function(x) x$Name=='A'));
## [1] 1

如果您想要 Value具有 Name=='A' 的列表组件的:
unlist(lapply(pairs,function(x) if (x$Name=='A') x$Value));
## [1] 11

如果您想要具有 Name=='A' 的组件的子列表:
pairs[sapply(pairs,function(x) x$Name=='A')];
## [[1]]
## [[1]]$Name
## [1] "A"
##
## [[1]]$Value
## [1] 11

如果您想要第一个具有 Name=='A' 的内部列表(如果您确定只有一场比赛,可以删除 [1]):
pairs[[which(sapply(pairs,function(x) x$Name=='A'))[1]]];
## $Name
## [1] "A"
##
## $Value
## [1] 11

或者,由于您的数据看起来是规则的,您可以转换为 data.frame,这将简化所有这些操作:
df <- do.call(rbind,lapply(pairs,as.data.frame));
df;
##   Name Value
## 1    A    11
## 2    B    17
## 3    C    23

以下是 df 的等效项:
any(df$Name=='A');
## [1] TRUE
sum(df$Name=='A');
## [1] 1
df$Value[df$Name=='A'];
## [1] 11
subset(df,Name=='A');
##   Name Value
## 1    A    11
subset(df,Name=='A')[1,];
##   Name Value
## 1    A    11

关于r - 如何检查列表列表的元素是否符合条件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31104348/

相关文章:

r - 在ggplot中以日期格式显示x轴的矩形

python - 在 python 中返回了错误的列表

android - 在 firefox 或任何其他适用于 windows/桌面 linux 的浏览器中像 appstore 一样列出

r - 使用 ggplotly 对图例中的元素进行分组失败

r - plot.new() 中的错误 : figure margins too large, 散点图

python - 根据匹配值合并 2 个字典列表,否则保持原始?

python - 查找图像包含其他图像

xcode - Xcode 5 上的项目范围词匹配搜索

RMySQL:RS_DBI_getConnection 中的内部错误:连接句柄损坏

带列表的 Python 递归返回 None