【问题标题】:In a R, how to choose the elements of a list of lists according to the value of an element of the sublists?在R中,如何根据子列表元素的值选择列表列表的元素?
【发布时间】:2017-04-19 12:29:32
【问题描述】:

假设在 R 中我们有以下列表,称为 A

A <- list();
for (i in c(1:1000)) {
    A[[i]] <- list(sample(LETTERS, 1, T), runif(1, 1, 1000))
}

这样对于A 中的每个元素iA[[i]][[1]] 将是一个随机分配的字母,A[[i]][[2]] 将是一个从 1 到 1000 的随机分配的数字。

既然如此,有没有办法(最好不使用循环)来确定 A 的哪些元素 j 包含第二个元素大于 500 的列表? IE。这样A[[j]][[2]] &gt; 500?

如果我们使用数据帧,我们可以使用函数which。但我不知道如何使用列表列表来实现这一目标。

【问题讨论】:

  • 如果您要为列表子集创建索引,您可以直接过滤:Filter(function(x){x[[2]] &gt; 500}, A)

标签: r list


【解决方案1】:

我们可以使用sapply返回一个逻辑vector

i1 <- sapply(A, function(x)  x[[2]]>500)

或者没有匿名函数调用

i2 <- sapply(A, `[[`, 2)> 500

identical(i1, i2)
#[1] TRUE

这个索引可以用来过滤'A'

A[i1]

【讨论】:

    【解决方案2】:

    这也可以(生成逻辑向量):

    unlist(A, recursive = FALSE)[seq(2,2*length(A),2)] > 500
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-11-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-12
      • 2022-08-19
      • 1970-01-01
      相关资源
      最近更新 更多