Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

cbind puts 1 instead of character

Tags:

r

cbind

I'm about to throw R out of the window. R is lovely, but sometimes a little problem takes hours to get solved.

Got this df:

Product <- c("Basket", "Basket", "Basket", "Apple", "Apple", "Apple", "Corn", "Corn", "Corn", "Basket")
Place <- c("America", "Europe", "Africa", "America", "Europe", "Africa", "America", "Europe", "Africa", "America")
Detail <- c("Income", "Income", "Outcome", "Outcome", "Income", "Outcome", "Outcome", "Income", "Income", "Outcome")
Valuex <- c(1500, 2000, 2000, 4000, 5000, 700, 4000, 2000, 7000, 450)
df_test <- data.frame(Product, Place, Detail, Valuex, stringsAsFactors = FALSE)

Then, I create another data.frame by doing this:

test <- df_test[1,]

At last, I use cbind like this:

test[1,1:4] <- cbind(df_test[1,1:2], "Prueba", df_test[1, 4])

And when I look into the data frame test I find this:

  Product   Place Detail Valuex
1  Basket America      1   1500

Instead of saving "Prueba", saves 1.

I've tried as.character("Prueba"), c("Prueba"), paste("Prueba"), but it still puts 1.

Could anyone help me?

like image 207
David_Rowie Avatar asked Dec 07 '25 17:12

David_Rowie


1 Answers

The reason you keep seeing 1 in place of Preuba, is that the value is being converted to a factor, and you are seeing the level value. You may avoid this by assigning the first row of test to a cbind call which has stringsAsFactors set to false, e.g.

test <- df_test[1,]
df <- cbind(df_test[1,1:2], "Prueba", df_test[1, 4], stringsAsFactors=FALSE)
test[1,] <- df
test

  Product   Place Detail Valuex
1  Basket America Prueba   1500

Demo

However, a possibly better workaround to your problem is to just assign a vector to the first row of the test data frame:

test[1,] <- c(df_test[1,1:2], "Prueba", df_test[1, 4])
like image 137
Tim Biegeleisen Avatar answered Dec 10 '25 11:12

Tim Biegeleisen