Поддерживать значения> = 0 в столбце вложенного списка в data.table R - PullRequest
1 голос
/ 08 января 2020

У меня есть следующий data.table объект:

USER    active  rate   day    # of elements by hour
4q7C0o  1         1.48  1       c(-10, 0, 0, 0, -5, -5, 5, 98, 167, 211, 246)
2BrKY63 1         0.5   3       c(-11, 0, 0, 0, -1, -1, 0, 5, 15, 24, 89, 187) 
3drUy6I 1         2.58  5       c(-20, 0, -9, 0, 0, 0, 0, 0, 1, 112, 265, 309) 
G5ALtO  1         1.1   7       c(-183, -1, 0, 0, 0, 0, 0, 2, 20, 153, 170)

Я хотел бы сохранить только элементы> = 0 в каждом из списков в столбце # of elements by hour, чтобы получить что-то подобное :

USER    active  rate   day    # of elements by hour
4q7C0o  1         1.48  1       c( 0, 0, 0, 5, 98, 167, 211, 246)
2BrKY63 1         0.5   3       c( 0, 0, 0, 0, 5, 15, 24, 89, 187) 
3drUy6I 1         2.58  5       c( 0, 0, 0, 0, 0, 0, 1, 112, 265, 309) 
G5ALtO  1         1.1   7       c( 0, 0, 0, 0, 0, 2, 20, 153, 170)

Я попробовал следующий подход, но он занимает слишком много времени, и когда я использую меньшее количество данных, это дает странные результаты:

DT[, # of elements by hour[which(unlist(# of elements by hour) >= 0)], day ]

Любое предложение в том, что я Я делаю не так? или лучше сделать это быстрее?

Ответы [ 2 ]

2 голосов
/ 08 января 2020

Вы можете попробовать:

library(data.table)
dt[, elements_by_hour := lapply(elements_by_hour, function(x) x[x >= 0])]
0 голосов
/ 08 января 2020

Мы также можем сделать

library(dplyr)
library(purrr)
dt %>%
   mutate(elements_by_hour = keep(elements_by_hour, ~ .x > 0))

Или

dt %>%
   mutate(elements_by_hour = map(elements_by_hour, ~ .x[.x > 0]))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...