我有一个列表列表:
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/