R 版本的 inplace=True

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.

同理,运行ning 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 中使用宏,但我不知道为什么。也许它们很危险,但也许它们只是看起来晦涩难懂。