我有一个名为“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))
答案 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