如何一次转换多个变量的 class
How to convert class of several variables at once
所以我有一个包含几个变量的数据框,这些变量是我想转换为数字的字符。这些变量中的每一个都以 "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)
尝试 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]
这是一个以 R 为基数的解决方案
df[, grepl("sect1", names(df))] <- lapply(df[, grepl("sect1", names(df))], as.factor)
将数字
的as.factor
更改为as.numeric
所以我有一个包含几个变量的数据框,这些变量是我想转换为数字的字符。这些变量中的每一个都以 "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)
尝试 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]
这是一个以 R 为基数的解决方案
df[, grepl("sect1", names(df))] <- lapply(df[, grepl("sect1", names(df))], as.factor)
将数字
的as.factor
更改为as.numeric