我只是不明白为什么我的数据框仍然是一个因素,即使我尝试将其更改为角色。
这里我有一个数据框list_attribute$affrete
。
affrete
<chr>
Fruits
Apple
Grape Fruits
Lemon
Peach
Banana
Orange
Strawberry
Apple
我应用了一个函数,使用另一个数据框list_attribute$affrete
将renaming
中的某些值替换为其他值,该数据框有两列(名称和重命名)。
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,但没有一个有效。为什么?我很感激你的帮助!
答案 0 :(得分:5)
默认情况下data.frame
有参数stringsAsFactors = TRUE
。当您致电data.frame(affrete)
时,它会将字符转换为因子。你可以:
data.frame(affrete, stringsAsFactors = FALSE)
options(stringsAsFactors = FALSE)
list_attribute$affrete$affrete <- as.character(list_attribute$affrete$affrete)
tbls
中的tidyverse
,请致电tibble(affrete)
。这些从不转换字符,以及其他好处。答案 1 :(得分:1)
我认为问题来自list_attribute$affrete <- data.frame(affrete)
,data.frame()
的默认行为是stringsAsFactors = TRUE