R版本的inplace = True

时间:2018-07-18 17:19:31

标签: r dplyr recode

我开始学习R,而且很难更改一个因子中值的名称。我尝试过使用重值和重新编码,但是当我查看数据框时,仍然看到原始名称。

DF的外观如下:

ng-bind-html="vm.trustedHTML"

这是编码尝试:

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

运行代码后,DF看起来完全一样。我知道在Python中我必须输入“ inplace = TRUE”才能使更改生效-不确定我在这里需要做什么(或者我缺少什么)。

2 个答案:

答案 0 :(得分:3)

R不会进行适当的修改,您必须分配结果-要么返回原始变量以进行修改,要么分配给新变量。这是功能编程的范例,R是功能编程语言。

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

以相同的方式运行recode,将评估并打印结果,但是,如果要修改数据框中的列,则需要用freecut$homeland = recode(...)明确分配它。


附加软件包中有一些例外。例如,data.table包定义了一些set*运算符,它们确实会修改对象。 data.table很棒,特别是在您需要效率的情况下,但是如果您刚开始使用R,建议您先熟悉基础知识。

答案 1 :(得分:0)

除了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中使用宏,但我不知道为什么。也许它们很危险,但是看起来似乎很晦涩。