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