заполнение data.table информацией из нескольких объектов в R - PullRequest
1 голос
/ 21 апреля 2020

В большой функции я бы хотел создать "сводную таблицу". Эта сводная таблица суммирует информацию из нескольких объектов R, которые были созданы внутри функции. Объектами являются:

Таблица данных с информацией о пределе

>     str(limit)
Classes ‘data.table’ and 'data.frame':  1 obs. of  3 variables:
 $ id   : num 6292
 $ type : chr "DAILY"
 $ value: chr "350"
 - attr(*, ".internal.selfref")=<externalptr>

вектор с положением элемента в mydata над пределом limits$value

n <- which(mydata$amount > as.double(limit$value))
str(n)
int [1:4960] 1 2 3 5 6 9 11 16 19 20 ...

Теперь я создал пустой файл data.table problem со строками, которые я хочу использовать для суммирования элементов, превышающих ограничение в mydata:

  problem <- data.table("LIMITid" = character(),
                        "LIMITtype" = character (), 
                        "LIMITvalue" = character (), 
                        "amount" = double(), 
                        "customerID" = character())

Наконец, я хочу заполнить мой problem data.table соответствующей информацией. Я попытался:

if(length(n) > 0){
 problem$LIMITid <- limit$id
 problem$LIMITtype <- limit$type
 problem$LIMITvalue <- limit$value
 problem$amount <- mydata$amount
 problem$customerID <- mydata$customerID
}

Как я могу заполнить data.table? Я думал об использовании al oop, но я не уверен, как l oop над позициями в элементе - n %in% nrownames(mydata)?

Ответы [ 2 ]

1 голос
/ 21 апреля 2020

Мы можем указать интересующие столбцы в .SDcols, а затем подставить .SD (Подмножество Data.table) с индексом, предоставленным 'n', и cbind с набором данных 'limit'

library(data.table)
cbind(limits, mydata[, .SD[n], .SDcols = c("amount", "customerID")])
0 голосов
/ 21 апреля 2020

Разве это не сработает?

library(data.table)
data.table(limits, amount = mydata$amount[n], customerID = mydata$customerID[n])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...