rbind char vector to data frame

15,402

Solution 1

You can store your information in a character matrix. Of course, you can convert this matrix into a data frame using as.data.frame and the argument stringsAsFactors = FALSE.

> test <- matrix(c("hi","i","am","bob"), nrow = 1)
> test <- rbind(test, c("hi","i","am","alice"))
> test
     [,1] [,2] [,3] [,4]   
[1,] "hi" "i"  "am" "bob"  
[2,] "hi" "i"  "am" "alice"

> testDF <- as.data.frame(test, stringsAsFactors = FALSE)
> testDF <- rbind(testDF, c("hi","i","am","happy"))
> testDF
  V1 V2 V3    V4
1 hi  i am   bob
2 hi  i am alice
3 hi  i am happy

Solution 2

Problem is that R, by default, understands characters as factors. In order to avoid this behaviour:

options(stringsAsFactors = FALSE)
test <- data.frame()
test<-rbind(test,c("hi","i","am","bob"))
test<-rbind(test,c("hi","i","am","alice"))
Share:
15,402
user3182532
Author by

user3182532

Updated on June 09, 2022

Comments

  • user3182532
    user3182532 almost 2 years
    > test <- data.frame()
    > test<-rbind(test,c("hi","i","am","bob"))
    > test<-rbind(test,c("hi","i","am","alice"))
    Warning message:
    In `[<-.factor`(`*tmp*`, ri, value = "alice") :
      invalid factor level, NAs generated
    

    Why does this minimal example produce that error? I want to append several string-rows to an empty data frame.

  • Rainfall.NZ
    Rainfall.NZ almost 3 years
    As of R 4.0.0 data.frame() default has changed to stringAsFactors = FALSE, so it no longer has to be explicitly changed. The original problem no longer occurs