我試過這行代碼。我認爲它現在早些時候放棄了它。如何將所有因子變量轉換爲數據框中的整數?
lapply(is.factor(df),levels(df)=(1:length(levels(df))))
我想所有的因子變量轉換成整數值1,2,3一樣等
我試過這行代碼。我認爲它現在早些時候放棄了它。如何將所有因子變量轉換爲數據框中的整數?
lapply(is.factor(df),levels(df)=(1:length(levels(df))))
我想所有的因子變量轉換成整數值1,2,3一樣等
你幾乎沒有。你應該通過數據幀的第一個參數在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))
我知道這一個,但正在嘗試一種更好的方法,我認爲這是一個更好的方法。感謝您的回答。 –
第二個參數有了新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
'indx < - sapply(df,is.factor); df [indx] < - lapply(df [indx],as.integer)'? –
@DavidArenburg是我非常錯誤的嘗試,因爲如果我沒有錯,它曾經工作過一次。 –
'lapply'不能像那樣工作。您需要指定一個匿名函數才能使解決方案正常工作。你也需要遍歷'df'中的列而不是一個長度爲1的邏輯向量。例如,'df [] < - lapply(df,function(x)if(is.factor(x))levels(x)=(1:length(levels(x)))else x)',但你可能不需要這個併發症。你也可以使用'nlevels'而不是'length(levels())'順便說一句。 –