R version of inplace=True



我开始学习R,并且很难更改因子中值的名称。我已经尝试过使用重估和重新编码,但当我查看数据帧时,仍然可以看到原始名称。

DF是这样的:

head(freecut)
gender oldness student_loaniness homeland
1      0      20                 4  Eurasia
2      1      25                 4   Oceana
3      1      56                 2 Eastasia
4      0      65                 6 Eastasia
5      1      50                 5   Oceana
6      0      20                 5 Eastasia

以下是编码尝试:

revalue(freecut$homeland, c("Eastasia" = "East_Asia", "Eurasia" = "Asiope",
"Oceana" = "Nemoville"))
recode(freecut$homeland, Eastasia = "East_Asia", Eurasia = "Asiope", 
Oceana = "Nemoville")

运行代码后,DF看起来完全相同。我知道在Python中,我必须输入"inplace=TRUE"才能使更改保持不变——不确定我需要在这里做什么(或者我缺少什么(。

R没有就地修改,您必须将结果分配回原始变量以修改它,或者分配给新变量。这是函数式编程的一个范例,R是一种函数式编程语言。

如果您有x = 1,运行x + 1将评估并打印结果2,但x不会更改。如果要用修改后的值覆盖x,请运行x = x + 1

同样,运行recode将计算并打印结果,但如果要修改数据帧中的列,则需要显式地为其分配freecut$homeland = recode(...)


附加程序包中有一些例外。例如,data.table包定义了一些set*操作符,这些操作符可以就地修改对象。data.table非常棒,尤其是如果你需要效率,但如果你刚开始学习R,我建议你先熟悉基本知识。

除了Gregor的答案解决了更基本的问题外,您还可以在特定情况下使用levels<-:

levels(freecut$homeland) <- c("first", "second", "third")
# order is important if you don't want surprises

或者,如果您准备加入黑暗面,可以考虑gtools包中的宏。第一步描述于https://www.r-bloggers.com/macros-in-r/.没有人在R中使用宏,但我不知道为什么。也许它们很危险,但也许它们只是看起来晦涩难懂。

最新更新