查找大于X的列表元素中的值

时间:2018-01-01 20:58:41

标签: r list lapply

我有一个名为“find_gaps”的元素列表,下面是列表的前3个元素:

$`2014-11-01 00:33:18`
 1   1   1   1   1   1   1   1   1 118  

$`2014-11-01 01:35:58`   1   1   1   1   1   1   1   1   1 116   

$`2014-11-01 02:34:28` 1  25  25 

我希望在每个元素中找到大于或等于24的值,并将输出作为数据框,其中每列包含的行等于每个列表元素的大于24的值的数量。例如,“find_gaps”中的第一个元素将对应于仅具有一行(具有值118)的数据帧列。我确信有一种方法可以做到这一点,我使用了下面的代码,但我只得到每个列表元素中值的位置/索引大于24,而不是值本身:

  greater_than_24<-lapply(find_gaps,function(x)which(x>=24))

2 个答案:

答案 0 :(得分:2)

g <- new.env()
g$a <- 1

g2 <- new.env()
g2$a <- 1

identical(as.list(g), as.list(g2))
## [1] TRUE

all.equal(g, g2)
## [1] TRUE

identical(g, g2)
## [1] FALSE

或者 - 这将在列表的每个元素中拉出大于24的值:

greater_than_24<-unlist(lapply(find_gaps,function(x) length(which(x>=24))))

> as.data.frame(t(greater_than_24))

  V1 V2 V3
1  1  1  2

答案 1 :(得分:0)

这个问题已经有了一个公认的答案,OP已经描述了他希望输出的形式

尽管如此,我想提出一种不同的方法,以长格式返回结果 (包括列表元素的名称)。我希望OP发现这个结果的替代表示有用。

library(data.table)
data.table(find_gaps, name = names(find_gaps))[
  , .(value = unlist(find_gaps)), by = name][value > 24]
                  name value
1: 2014-11-01 00:33:18   118
2: 2014-11-01 01:35:58   116
3: 2014-11-01 02:34:28    25
4: 2014-11-01 02:34:28    25