【问题标题】:Finding values in elements of a list greater than X在大于 X 的列表元素中查找值
【发布时间】:2018-01-01 20:58:41
【问题描述】:

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

【问题讨论】:

  • 我尝试了一个解决方案 - 但如果不令人满意,您能否明确说明您希望输出的样子?
  • 您能否进一步说明您的预期输出?
  • 欢迎堆栈溢出。请使用dput函数复制您的列表。

标签: r list lapply


【解决方案1】:
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

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

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

> as.data.frame(t(greater_than_24))
   V1  V2     V3
1 118 116 25, 25

【讨论】:

  • 替代方案(第二种解决方案)正是我想要的,谢谢!
【解决方案2】:

这个问题已经有一个公认的答案,并且 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-11-22
    • 1970-01-01
    • 1970-01-01
    • 2021-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-03
    相关资源
    最近更新 更多