我开始学习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”才能使更改生效-不确定我在这里需要做什么(或者我缺少什么)。
答案 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中使用宏,但我不知道为什么。也许它们很危险,但是看起来似乎很晦涩。