2015-01-08 23 views
0

在創建內容包含重複值的列時,我注意到以下因素。一列如何被確定爲數據框中的類因子?

1.如果在數據框創建時將具有重複字符值的列作爲數據框的一部分,則它屬於類因子,但如果稍後添加相同的列,則它是類別字符,兩種情況下的值都是相同的。爲什麼是這樣?

#creating a data frame 
name = c('waugh','waugh','smith') 
age = c(21,21,27) 
df = data.frame(name,age) 

#adding a new column which has the same values as the 'name' column above, to the data frame 
df$newcol = c('waugh','waugh','smith') 

#you can see that the class'es of the two are different though the values are same 
class(df$name) 
## [1] "factor" 
class(df$newcol) 
## [1] "character" 
  • 只有其具有重複字母內容的列成爲一個因素;如果某列包含重複的數值,則不會將其視爲一個因子。這是爲什麼?我很可能意味着1-Male,0-Female,在這種情況下,它應該是一個因素?

    注意,這兩列包含重複值

    class(df$name) 
    ## [1] "factor" 
    class(df$age) 
    ## [1] "numeric" 
    
  • +6

    請參閱'?data.frame'和'stringsAsFactors'參數。 '$ < - 。data.frame'不會調用'data.frame'構造函數,所以不會發生任何轉換。 –

    +3

    對Joshua的評論添加的唯一一件事情是,它不是重複的值,這會導致創建因子列,而是data.frame處理_any_字符向量。 (沒有做出「決定」。) –

    +0

    @JoshuaUlrich謝謝,我在df創建時嘗試過stringsAsFactors = FALSE。我有一個問題,當我添加一個新列像df $ newcol = c('waugh','waugh','smith')時,我該如何將它設置爲TRUE – IAMTubby

    回答

    1

    這基本上在評論中回答,但我把答案在這裏,收出了問題。

    當您使用data.frame()創建data.frame時,該函數實際上操縱您傳入的參數以創建data.frame對象。具體而言,默認情況下,它有一個名爲stringsAsFactors=TRUE的參數,以便它將採用所有傳入的字符向量並將它們轉換爲因子向量,因爲通常您將這些值視爲各種統計測試中的分類隨機變量,並且存儲效率更高字符值作爲一個因素,如果您有許多值在向量中重複。

    df <- data.frame(name,age) 
    class(df$name) 
    # [1] "factor" 
    df <- data.frame(name,age, stringsAsFactors=FALSE) 
    class(df$name) 
    # [1] "character" 
    

    請注意,data.frame本身不記得構造過程中使用的「stringsAsFactors」值。這僅在您實際運行data.frame()時使用。所以,如果你通過通過$<-語法或cbind()賦予它們添加列,脅迫不會。如果你想將列添加的一個因素髮生

    df1 <- data.frame(name,age) 
    df2 <- data.frame(name,age, stringsAsFactors=FALSE) 
    df1$name2 <- name 
    df2$name2 <- name 
    df3 <- cbind(data.frame(name,age), name2=name) 
    class(df1$name2) 
    # [1] "character" 
    class(df2$name2) 
    # [1] "character" 
    class(df3$name2) 
    # [1] "character" 
    

    ,你將需要轉換成因子自己

    df = data.frame(name,age) 
    df$name2 <- factor(name) 
    class(df$name2) 
    # [1] "factor" 
    
    相關問題