更改 xdf 数据集的列位置
Changing the column positions of an xdf dataset
我想知道是否有办法重新排列 xdf 数据集的列位置。例如,如果我有一个包含 [a],[c],[b] 列的 xdf 数据集,我想将列重新排序为 [a],[b],[c] 而无需创建数据框,重新排序列,并使用 RxImport 或 rxDataFrameToXdf 将其转换回xdf 文件(因为 xdf 文件可能有数百万行,我不想将数据集写入内存)。
我看到的一个可能的解决方案是使用 rxSetVarInfoXdf 函数,它包含有关列位置的信息。
类似于:
交换第 2 列和第 3 列的位置
varInfo <- list(list(position = 2, position = 3), list(position = 3, position = 2))
但这不起作用,因为 position 是一个值,您调用该值是为了引用该列而不是更改它。
您可以在 rxDataStep
中使用 varsToKeep
来重新排序您的列,这会将其全部保存在 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)
我想知道是否有办法重新排列 xdf 数据集的列位置。例如,如果我有一个包含 [a],[c],[b] 列的 xdf 数据集,我想将列重新排序为 [a],[b],[c] 而无需创建数据框,重新排序列,并使用 RxImport 或 rxDataFrameToXdf 将其转换回xdf 文件(因为 xdf 文件可能有数百万行,我不想将数据集写入内存)。
我看到的一个可能的解决方案是使用 rxSetVarInfoXdf 函数,它包含有关列位置的信息。
类似于: 交换第 2 列和第 3 列的位置
varInfo <- list(list(position = 2, position = 3), list(position = 3, position = 2))
但这不起作用,因为 position 是一个值,您调用该值是为了引用该列而不是更改它。
您可以在 rxDataStep
中使用 varsToKeep
来重新排序您的列,这会将其全部保存在 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)