更改xdf数据集的列位置

时间:2015-02-28 14:58:51

标签: r revolution-r

我想知道是否有办法重新排序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 个答案:

答案 0 :(得分: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)