我有很多數據幀列,我希望將其轉換爲因子,而不用考慮每個單獨的字段。如何遍歷列名稱,如果任何符合正則表達式轉換他們的因素?我從Python世界中來了,我還不知道循環和字符串替換在R.R因子所有包含字符串的列
僞代碼:
for name in df.columns.names:
if name matches "regex":
df$name <- factor(df$name)
我有很多數據幀列,我希望將其轉換爲因子,而不用考慮每個單獨的字段。如何遍歷列名稱,如果任何符合正則表達式轉換他們的因素?我從Python世界中來了,我還不知道循環和字符串替換在R.R因子所有包含字符串的列
僞代碼:
for name in df.columns.names:
if name matches "regex":
df$name <- factor(df$name)
大概:
df[ , grepl('regex' , names(df)) ] <-
lapply(df[ , grepl('regex' , names(df)) ], factor)
也可以在使用grep
這個案例。 [
和[<-
的參數j
可以採用邏輯參數或數字參數。
我可能會將'grepl(...)'保存爲'idx'或其他東西,那麼你可以做一個更簡潔的聲明像'df [idx] < - lapply(df [idx],factor)' – thelatemail
@thelatemail我不明白「idx」是什麼。正則表達式檢查在沒有grep的情況下發生在哪裏? –
@erics - 'idx < - grepl('regex',names(df))' - 首先運行,這樣您不必重複代碼兩次。 – thelatemail
我們可以使用type.convert
df[] <- lapply(df, function(x) type.convert(as.character(x)))
'DF = lapply(DF,函數(x)如果(is.character(X))的回報(係數(X))否則返回(X))'。 – Gregor
但是,進行這些更改的最佳位置是在讀取數據時。查看你正在讀數據的列類參數。 – Gregor
'library(dplyr); df%>%mutate_each(funs(factor),matches('regex'))' – alistaire