У меня есть список элементов под названием "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
StephD 1 Янв 2018 в 23:58

2 ответа

Лучший ответ
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
jrlewi 1 Янв 2018 в 21:17

На этот вопрос уже есть принятый ответ, и 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
0
Uwe 1 Янв 2018 в 23:15