2016-06-16 49 views
1

我有很多數據幀列,我希望將其轉換爲因子,而不用考慮每個單獨的字段。如何遍歷列名稱,如果任何符合正則表達式轉換他們的因素?我從Python世界中來了,我還不知道循環和字符串替換在R.R因子所有包含字符串的列

僞代碼:

for name in df.columns.names: 
     if name matches "regex": 
      df$name <- factor(df$name) 
+0

'DF = lapply(DF,函數(x)如果(is.character(X))的回報(係數(X))否則返回(X))'。 – Gregor

+1

但是,進行這些更改的最佳位置是在讀取數據時。查看你正在讀數據的列類參數。 – Gregor

+0

'library(dplyr); df%>%mutate_each(funs(factor),matches('regex'))' – alistaire

回答

1

大概:

df[ , grepl('regex' , names(df)) ] <- 
            lapply(df[ , grepl('regex' , names(df)) ], factor) 

也可以在使用grep這個案例。 [[<-的參數j可以採用邏輯參數或數字參數。

+1

我可能會將'grepl(...)'保存爲'idx'或其他東西,那麼你可以做一個更簡潔的聲明像'df [idx] < - lapply(df [idx],factor)' – thelatemail

+0

@thelatemail我不明白「idx」是什麼。正則表達式檢查在沒有grep的情況下發生在哪裏? –

+0

@erics - 'idx < - grepl('regex',names(df))' - 首先運行,這樣您不必重複代碼兩次。 – thelatemail

0

我們可以使用type.convert

df[] <- lapply(df, function(x) type.convert(as.character(x))) 
相關問題