将data.table转换为data.tables的行列表,并将函数应用于每一行

时间:2019-07-05 11:09:42

标签: r list data.table apply rows

比方说,我在R中有一个data.table。我想将其转换为一个列表,其中每个元素都是一个单独的data.table,仅包含一行。然后,我有一个应用于每个单行数据表的函数。我想限制输出。

我尝试了Apply系列的许多版本,但无法使其正常工作。

我想做以下事情,但是使用apply函数作为我的真实数据。表非常大,其中有很多。而且,实际功能要复杂得多。

DT <- data.table(
  ID = c("b","a","c"),
  a = 1:3,
  b = 7:9,
  c = 13:15
)

DT1<-DT[1]
DT2<-DT[2]
DT3<-DT[3]

list<-list(DT1, DT2, DT3)

myfunction<-function(D){
  return(rbind(D, D))
}

DT1new<-myfunction(list[[1]])
DT2new<-myfunction(list[[2]])
DT3new<-myfunction(list[[3]])

result<-rbind(DT1new, DT2new, DT3new)
result

1 个答案:

答案 0 :(得分:1)

您首先希望:将data.table转换为许多列表,其中每个表在原始表中都是一行:

lapply(seq_len(nrow(DT)), function(i) DT[i])
# or
split(DT, seq_len(nrow(DT)))

根据应用程序上的当前描述(重复当前行),您可以使用以下方法跳过此第一步:

DT[rep(seq_len(.N), each = 2)]
# or 
DT[, .SD[c(1,1)], by = seq_len(nrow(DT))]

通常,您应该能够(一次操作一行):

DT[, myFunction(.SD), by = seq_len(nrow(DT))]