2015-06-18 29 views
3

因此,我有一個數據框,其中有幾個變量是我想要轉換爲數字的字符。每個變量都以「sect1」開頭。我可以一次輕鬆地做到這一點,但我想知道這是否可以一次完成。如何使用dplyr一次轉換多個變量的類

我已經使用下面的代碼以笨重的方式完成了這項工作。也許有更好的方法?

df=data.frame(sect1q1=as.character(c("1","2","3","4","5")), 
sect1q2=as.character(c("2","3","4","7","8")),id=c(22,33,44,55,66), 
stringsAsFactors = FALSE) 
df1 = sapply(select(df,starts_with("sect1")),as.numeric) 
df = select(df,-starts_with("sect1")) 
df =cbind(df,df1) 

回答

4

嘗試mutate_each和(按照@Franks從magrittr包註釋的%<>%操作以修改到位

library(magrittr) 
df %<>% mutate_each(funs(as.numeric), starts_with("sect1")) 
str(df) 
# 'data.frame': 5 obs. of 3 variables: 
# $ sect1q1: num 1 2 3 4 5 
# $ sect1q2: num 2 3 4 7 8 
# $ id  : num 22 33 44 55 66 

另外,使用data.table包,你可以修改數據到位使用:=運營商

library(data.table) 
indx <- grep("^sect1", names(df), value = TRUE) 
setDT(df)[, (indx) := lapply(.SD, as.numeric), .SDcols = indx] 
1

這裏是基礎R

df[, grepl("sect1", names(df))] <- lapply(df[, grepl("sect1", names(df))], as.factor)

變化as.factor爲數字

+1

的解決as.numeric我在基礎R解決方案,它只是變得非常難看試圖讓所有的括號,括號直。 –

相關問題