簡體   English   中英

在R中初始化嵌套數據幀

[英]Initialize a nested data frame in R

我有一個稱為ldt的嵌套數據表。 每個方向的最大尺寸是

ldt[[44]][7200,4]

意味着每個嵌套的data.table(DT)是7200行乘4列,並且有44個這樣的嵌套DT。

我想基於第一組創建第二組DT。

具體來說,我要執行命令

for (i in length(ldt)) {ldtSUM[[i]]<-ldt[[i]][, sum(V4), by="V1,V3"]}

如果成功,則應生成一個嵌套的維數組

ldtSUM[[44]][120,4]

但是這樣做會導致錯誤:

Error in ldtSUM[[i]] <- ldt[[i]][, sum(V4), by = "V1,V3"] : object 'ldtSUM' not found

大概是因為我從未初始化過它。

因此,為了避免這種情況,我嘗試了多種初始化技術,例如

ldtSUM=ldt[[1:44]][0,]

和其他許多語句,但它們均由於各種原因而失敗,例如我未指定多個空行,或者“遞歸索引在3級失敗”等。

因此,總而言之,我想做的是創建一個data.table,其中$ V4與$ V1,$ V3相加,但是由於索引和初始化問題,我似乎無法執行此操作。

非常感謝你!

根據agstudy的答案,正確的代碼是:

ldtSUM<-lapply(ldt,function(x)x[, sum(V4), by = "V1,V3"]

您有兩部分解決您的問題:第一部分已經通過以下方式解決:

ldtSUM<-lapply(ldt,function(x)x[, sum(V4), by = "V1,V3"]

第二部分是關於初始化的,可以通過以下方法解決:

ldtSUM <- list()

初始化之后,如果您運行原始代碼:

for (i in length(ldt)) {ldtSUM[[i]]<-ldt[[i]][, sum(V4), by="V1,V3"]}

應該也可以。

注意:對於您的問題,agstudy建議的解決方案是最好的。 但是初始化是一個通用技巧,可在各種情況下使用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM