2015-12-01 43 views
0

我試過這行代碼。我認爲它現在早些時候放棄了它。如何將所有因子變量轉換爲數據框中的整數?

lapply(is.factor(df),levels(df)=(1:length(levels(df)))) 

我想所有的因子變量轉換成整數值1,2,3一樣等

+3

'indx < - sapply(df,is.factor); df [indx] < - lapply(df [indx],as.integer)'? –

+0

@DavidArenburg是我非常錯誤的嘗試,因爲如果我沒有錯,它曾經工作過一次。 –

+0

'lapply'不能像那樣工作。您需要指定一個匿名函數才能使解決方案正常工作。你也需要遍歷'df'中的列而不是一個長度爲1的邏輯向量。例如,'df [] < - lapply(df,function(x)if(is.factor(x))levels(x)=(1:length(levels(x)))else x)',但你可能不需要這個併發症。你也可以使用'nlevels'而不是'length(levels())'順便說一句。 –

回答

2

你幾乎沒有。你應該通過數據幀的第一個參數在lapply然後運行is.factor作爲構成的lapply

DFrame <- data.frame(x = letters[1:3], 
        y = letters[4:6], 
        z = LETTERS[9:11]) 

DFrame <- lapply(DFrame, 
       function(t) 
        if (is.factor(t)) as.numeric(t) else t) 
DFrame <- as.data.frame(DFrame) 
DFrame 

vapply(DFrame, class, character(1)) 
+0

我知道這一個,但正在嘗試一種更好的方法,我認爲這是一個更好的方法。感謝您的回答。 –

1

第二個參數有了新purrr package,這成爲了一個漂亮的單行的部分功能:

library(purrr) 

df <- data.frame(x = letters[1:3], 
       y = letters[4:6], 
       z = LETTERS[9:11]) 

df %>% map_if(is.factor, as.numeric) %>% str() 
#> 'data.frame': 3 obs. of 3 variables: 
#> $ x: num 1 2 3 
#> $ y: num 1 2 3 
#> $ z: num 1 2 3 
相關問題