Изменение позиций столбцов набора данных 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)
Другие вопросы по тегам