R:字符因素不起作用

Mak*_*aki 0 string r character dataframe

我只是不明白为什么我的数据框仍然是一个因素,即使我尝试将其更改为一个字符.

这里我有一个数据框list_attribute$affrete.

affrete
<chr>
Fruits
Apple                
Grape Fruits             
Lemon                
Peach                
Banana               
Orange               
Strawberry               
Apple
Run Code Online (Sandbox Code Playgroud)

我应用了一个函数,list_attribute$affrete使用另一个数据框将一些值替换为其他值renaming,该数据框有两列(Name和Rename).

affrete <- plyr::mapvalues(x = unlist(list_attribute$affrete, use.names = F), 
                           from = as.character(renaming$Name), 
                           to = as.character(renaming$Rename))
affrete <- as.character(affrete)
list_attribute$affrete <- data.frame(affrete)
Run Code Online (Sandbox Code Playgroud)

数据框renaming看起来像这样;

 Name        Rename
 <fctr>      <fctr>
 Apple       Manzana          
 Orange      Naranja          
 Lemon       Limon            
 Grape       Uva          
 Peach       Melocoton            
 Pinapple    Anana
Run Code Online (Sandbox Code Playgroud)

这是list_attribute$affrete在应用上述这些过程之后.

affrete
<fctr>
Manzana                
Grape Fruits             
Limon                
Melocoton                
Banana               
Naranja               
Strawberry               
Manzana
Run Code Online (Sandbox Code Playgroud)

为什么这个专栏仍然是一个因素?我尝试了这里讨论的方法,但没有一个有效.为什么?我很感激任何帮助!

Cal*_*You 5

默认情况下data.frame有参数stringsAsFactors = TRUE.当你调用data.frame(affrete)它时,将字符转换为因子.你可以:

  1. 打电话data.frame(affrete, stringsAsFactors = FALSE)
  2. 为您的会话永久设置此行为 options(stringsAsFactors = FALSE)
  3. 一旦它已经在列表中,事后修复 list_attribute$affrete$affrete <- as.character(list_attribute$affrete$affrete)
  4. 使用tblstidyverse,于是打电话tibble(affrete)来代替.这些从不转换字符,以及其他好处.