У меня очень большой Data Table
с двумя колоннами. И я хочу применить пользовательскую функцию к определенному столбцу. Код для создания проблемы заключается в следующем:Применить пользовательскую функцию для всего столбца data.table?
require(data.table)
X <- rep("This is just random text", 1e5)
data <- data.frame(1:1e5, replicate(1, X, simplify=FALSE), stringsAsFactors=FALSE)
colnames(data) <- paste("X", seq_len(ncol(data)), sep="")
DT <- as.data.table(data)
Теперь у нас есть большой таблицы данных, которая выглядит как
| X1 | X2 |
|----|-------------------------|
| 1 | This is just random text|
| 2 | This is just random text|
| 3 | This is just random text|
| 4 | This is just random text|
| .. | ... |
Что делать, если я хочу сделать некоторые векторную операцию на любом из этой колонки с учетом что эта таблица данных будет иметь очень большие размеры (приблизительно ~100M
строк).
Давайте рассмотрим пример столбца X1. Предположим, я хочу, чтобы применить следующую функцию на нем:
Fun4X1 <- function(x){return(x+x*2)}
И очень сложную NLP
функцию на колонке X2, которая выглядит что-то вроде
Fun4X2 <- function(x){
require(stringr)
return(str_split(x, " ")[[1]][1])
}
Как я буду ходить делать это для большого набора данных ? Пожалуйста, предложите мин. поскольку мой Function
сам по себе очень сложный.
P.S. Я пробовал foreach
, sapply
, и, конечно, for-loop
и все очень медленно на довольно хорошей аппаратной системе.
Что не так с использованием 'Fun4X2 [DT $ X2]'? – Andrie
Кроме того, если вы выполняете обработку текста, ознакомьтесь с 'grep' и' gsub' - функции 'stringr' являются простыми оболочками вокруг этих очень мощных функций. – Andrie
Как насчет 'DT [, список (Fun4X1 (X1), Fun4X3 (X2))]' где «Fun4X3» определяется как: «Fun4X3 <- function (x) strsplit (x,« ») [[1]] [ 1] ' – A5C1D2H2I1M1N2O1R2T1