Преобразуйте data.table в список строк, которые являются data.tables, и примените функцию к каждой строке - PullRequest
0 голосов
/ 05 июля 2019

Допустим, у меня есть data.table в R. Я хочу преобразовать его в список, в котором каждый элемент представляет собой отдельный data.table, который содержит только одну строку. Затем у меня есть функция, которая применяется к каждой строке данных. Я хочу привязать вывод.

Я перепробовал много версий семейства apply, но не могу заставить его работать.

Я хочу сделать следующее, но использую функции apply, так как мои реальные data.tables очень большие и их много. Кроме того, фактическая функция намного сложнее.

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 Ответ

1 голос
/ 05 июля 2019

Что касается вашего первого желания: преобразуйте таблицу 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))]
...