Yubin
Yubin

Reputation: 7

Change specific columns as factor in R

I have a file name "Second" and it has data "q1","q2",...."q40", and "q40_n1", "q40_n2","q40_n3", ..."q40_n20"

Some of them are "character" vectors and some are "integer"

My question is How can I change integer vector to "factor" at once?

  1. q30:q35 to "factor" ------- (q(30+n))
  2. q40_n1:q40_n4 to "factor" ---------(q40_n#)
  3. q18:q23 to "factor"

Upvotes: 1

Views: 201

Answers (3)

Paul van Oppen
Paul van Oppen

Reputation: 1495

A numeric or integer vector like:

x <- c(1, 2, 3)
> str(x)
 num [1:3] 1 2 3

can be converted to a factor vector:

x <- as.factor(x)
> x
[1] 1 2 3
Levels: 1 2 3
> str(x)
 Factor w/ 3 levels "1","2","3": 1 2 3

Upvotes: 1

r2evans
r2evans

Reputation: 160417

You can control all columns on read-in using the colClasses= argument:

str(read.csv(text="a,b\na,1"))
# 'data.frame': 1 obs. of  2 variables:
#  $ a: Factor w/ 1 level "a": 1
#  $ b: int 1

str(read.csv(text="a,b\na,1", colClasses="factor"))
# 'data.frame': 1 obs. of  2 variables:
#  $ a: Factor w/ 1 level "a": 1
#  $ b: Factor w/ 1 level "1": 1

str(read.csv(text="a,b\na,1", colClasses="character"))
# 'data.frame': 1 obs. of  2 variables:
#  $ a: chr "a"
#  $ b: chr "1"

Or you can factorize it later:

dat <- read.csv(text="a,b\na,11")
str(dat)
# 'data.frame': 1 obs. of  2 variables:
#  $ a: Factor w/ 1 level "a": 1
#  $ b: int 11
dat$b <- factor(dat$b)
str(dat)
# 'data.frame': 1 obs. of  2 variables:
#  $ a: Factor w/ 1 level "a": 1
#  $ b: Factor w/ 1 level "11": 1

### or all columns, without regard to original class
dat <- read.csv(text="a,b\na,11")
dat[] <- lapply(dat, factor)
str(dat)
# 'data.frame': 1 obs. of  2 variables:
#  $ a: Factor w/ 1 level "a": 1
#  $ b: Factor w/ 1 level "11": 1

Upvotes: 1

Łukasz Deryło
Łukasz Deryło

Reputation: 1860

With dplyr package:

mutate_at(Second, vars(q30:q35, q40_n1:q40_n4, q18:q23), factor)

Upvotes: 1

Related Questions