如何使用dplyr一次转换多个变量的类

时间:2015-06-18 19:49:43

标签: r dplyr

所以我有一个包含多个变量的数据框,这些变量是我想要转换为数字的字符。这些变量中的每一个都以“sect1”开头。我可以一次轻松地做到这一点,但我想知道这是否可以一次完成。

我使用以下代码以笨重的方式完成了这项工作。也许有更好的方法?

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)

2 个答案:

答案 0 :(得分: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 :(得分:1)

这是一个基础R

的解决方案

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

as.factor更改为as.numeric以获取数字