nilsole
nilsole

Reputation: 1723

R: Turning a data frame row into a character vector

Short version:

I do not understand the behaviour of as.character when trying to convert a single row of a data frame to a character vector.

> mydf <- data.frame("myvar1"=c("mystring","2"),"myvar2"=c("mystring","3"))
> mydf # nice!
myvar1   myvar2
1 mystring mystring
2        2        3
> as.character(mydf[1,])
[1] "2" "2"
> as.character(as.vector(mydf[1,]) ) 
[1] "2" "2"

Maybe somebody could give me an explanation for the last 2 output lines and the correct approach? Thanks a lot.

Background/Purpose:

I want to use lre() in order to detect consecutive occurrences of values in a row of a data frame (with columns of different data types).

Problem: lre() requires a vector, vectors require a definite data type (integer, character, factor, ...). My idea here is to turn the data frame row into a character vector to avoid data loss through conversion.

Upvotes: 13

Views: 34464

Answers (2)

csgillespie
csgillespie

Reputation: 60462

Your data frame columns aren't characters they are factors.

When you create a data frame the default is that characters are factors. You can see this clearly if you select a column

R> mydf[,1]
[1] mystring 2       
Levels: 2 mystring

To avoid this behaviour set the stringsAsFactors argument to FALSE

mydf = data.frame("myvar1"=c("mystring", "2"),
                    "myvar2"=c("mystring", "3"), 
                     stringsAsFactors=FALSE)

You should also look at this question: How to convert a data frame column to numeric type?

Upvotes: 11

coffeinjunky
coffeinjunky

Reputation: 11514

Try this:

 mydf <- data.frame("myvar1"=c("mystring","2"),"myvar2"=c("mystring","3"), stringsAsFactors=F)
 as.character(mydf[1,])
 [1] "mystring" "mystring"

Your strings have been coerced into factors, and you have been shown the factor levels.

Upvotes: 5

Related Questions