R:字符因素不起作用

时间:2018-04-12 17:07:07

标签: r string dataframe character

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

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

affrete
<chr>
Fruits
Apple                
Grape Fruits             
Lemon                
Peach                
Banana               
Orange               
Strawberry               
Apple

我应用了一个函数,使用另一个数据框list_attribute$affreterenaming中的某些值替换为其他值,该数据框有两列(名称和重命名)。

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)

数据框renaming看起来像这样;

 Name        Rename
 <fctr>      <fctr>
 Apple       Manzana          
 Orange      Naranja          
 Lemon       Limon            
 Grape       Uva          
 Peach       Melocoton            
 Pinapple    Anana

在应用上述过程后,这里是list_attribute$affrete

affrete
<fctr>
Manzana                
Grape Fruits             
Limon                
Melocoton                
Banana               
Naranja               
Strawberry               
Manzana

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

2 个答案:

答案 0 :(得分:5)

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

  1. 请致电data.frame(affrete, stringsAsFactors = FALSE)
  2. 使用options(stringsAsFactors = FALSE)
  3. 为您的会话永久设置此行为
  4. 一旦它已经在list_attribute$affrete$affrete <- as.character(list_attribute$affrete$affrete)
  5. 的列表中,就修复一下
  6. 使用tbls中的tidyverse,请致电tibble(affrete)。这些从不转换字符,以及其他好处。

答案 1 :(得分:1)

我认为问题来自list_attribute$affrete <- data.frame(affrete)data.frame()的默认行为是stringsAsFactors = TRUE