Изменение позиций столбцов набора данных xdf
Я хотел бы знать, если есть способ изменить порядок столбцов в наборе данных xdf. Например, если у меня есть набор данных xdf со столбцами [, a], [, c], [, b], я бы хотел изменить порядок столбцов на [,a],[,b],[,c] без чтобы создать фрейм данных, переупорядочить столбцы и использовать RxImport или rxDataFrameToXdf, чтобы преобразовать его обратно в xdf-файл (потому что xdf-файл потенциально имеет сотни миллионов строк, и я не хочу записывать набор данных в память).
Одно из возможных решений, которое я вижу, - это использование функции rxSetVarInfoXdf, которая имеет информацию о положении столбца.
Что-то вроде: поменяйте местами столбцы 2 и 3
varInfo <- list(list(position = 2, position = 3), list(position = 3, position = 2))
Но это не сработает, поскольку position - это значение, которое вы вызываете для ссылки на столбец, но не для его изменения.
1 ответ
Ты можешь использовать varsToKeep
в rxDataStep
переупорядочить ваши столбцы, который хранит все это в XDF. Я не совсем уверен в этом, но я верю, что все это происходит в C++, поэтому это должно быть относительно быстро.
# First, set up pointers to the source XDF file
sourcePath <- file.path(rxGetOption("sampleDataDir"), "mortDefaultSmall.xdf")
# Look at the top several rows
rxDataStep(sourcePath, numRows = 10)
# Create a new path for the reordered dataset
reorderPath <- paste0(tempfile(), ".xdf")
# If you've got a lot of columns and only want to move one, you probably
# don't want to type them all out. Try this instead:
varNames <- names(rxGetVarInfo(sourcePath))
varToMove <- "creditScore"
otherVars <- varNames[!varNames %in% varToMove]
# Reorder them using varsToKeep - just put varToMove at the end
rxDataStep(inData = sourcePath,
outFile = reorderPath,
varsToKeep = c(otherVars, varToMove),
overwrite = TRUE
)
# Check that the order has changed
rxDataStep(reorderPath, numRows = 10)