首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >替换MSR中的存在列

替换MSR中的存在列
EN

Stack Overflow用户
提问于 2016-12-15 13:16:55
回答 2查看 117关注 0票数 0

为什么下面的MSR代码不替换原始列"Var1"?

代码语言:javascript
复制
rxDataStep(inData = input_xdf, outFile = input_xdf, overwrite = TRUE,
       transforms = list(Var1 = as.numeric(Var1)),
       transformVars = c("Var1")
       )
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-12-17 12:54:46

目前,RevoScaleR不支持更改xdf文件中变量的类型(即使您写入不同的文件)。这样做的方法是创建一个新变量,删除旧变量,然后将新变量重命名为旧名称。

我建议使用transformFunc (有关更多信息,请参见?rxTransform )这样做,这样您就可以创建新变量并删除旧变量,所有这些都是在一个步骤中完成的:

代码语言:javascript
复制
rxDataStep(inXdf, outXdf, transformFunc=function(varlst) {
    varlst$Var1b <- as.numeric(varlst$Var1)
    varlst$Var1 <- NULL
    varlst
}, transformVars="Var1")

# this is fast as it only modifies the xdf metadata, not the data itself
names(outXdf)[names(outXdf) == "Var1b"] <- "Var1"
票数 1
EN

Stack Overflow用户

发布于 2016-12-16 15:48:55

MSR不允许您用不同的变量类型覆盖适当的变量。

您有两个选项:写入不同的变量或写入不同的文件。我添加了一些代码,表明这两种解决方案都可以像MRS 9.0.1中所说的那样工作。正如注释中所述,在早期版本中,这可能不起作用。我不完全确定这一点在哪里,所以代码应该让你知道。

代码语言:javascript
复制
input_xdf <- "test.xdf"
modified_xdf <- "test_out.xdf"

xdf_data <- data.frame(Var1 = as.character(1:10),
                       Var2 = 2:11,
                       stringsAsFactors = FALSE)

rxDataStep(inData = xdf_data,
           outFile = input_xdf,
           rowsPerRead = 5,
           overwrite = TRUE)

rxDataStep(inData = input_xdf, 
           outFile = input_xdf, 
           overwrite = TRUE,
           transforms = list(Var1b = as.numeric(Var1)),
           transformVars = c("Var1")
)

rxGetInfo(input_xdf, getVarInfo = TRUE, numRows = 5)

rxDataStep(inData = input_xdf, 
           outFile = modified_xdf,
           transforms = list(Var1 = as.numeric(Var1)),
           transformVars = c("Var1")
)

rxGetInfo(modified_xdf, getVarInfo = TRUE, numRows = 5)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41165139

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档