0

I have two data dfName & dfTest.

> dfName <- c("Ball", "Cat", "Dog")
> dfName
[1] "Ball" "Cat"  "Dog"

I set name of first row of dfTest as "Apple",

> dfTest <- data.frame(t(1:3))
> rownames(dfTest) <- "Apple"
> dfTest
      X1 X2 X3
Apple  1  2  3

I want to append new rows to dfTest and assign its rows' name using dfName.

for(i in 1:3) {
  dfTest <- rbind(dfTest, dfName[i] = data.frame(t(1:3)))
}

But it will retun this error,

Error: unexpected '=' in:
"for(i in 1:3) {
  dfTest <- rbind(dfTest, dfName[i] ="

So I use rownames as workaround,

for(i in 1:3) {
  dfTest <- rbind(dfTest, data.frame(t(1:3)))
  rownames(dfTest)[i+1] <- dfName[i]
}
> dfTest
      X1 X2 X3
Apple  1  2  3
Ball   1  2  3
Cat    1  2  3
Dog    1  2  3

No issue if it's just a string variable,

> varA <- "Elephant"
> dfTest <- rbind(dfTest, varA = data.frame(t(1:3)))
> dfTest <- rbind(dfTest, "Flower" = data.frame(t(1:3)))

I know it's just one more line/function, but I wonder why I can't use dfName[i] in rbind().

Edit: I can't use rownames(dfTest) <- dfName because their number of rows don't match in my actual data.

Saftever
  • 685
  • 6
  • 9
  • Possible duplicate of https://stackoverflow.com/questions/16834223/how-to-set-rownames-of-a-data-frame . – Ronak Shah May 18 '18 at 08:23
  • 1
    I would avoid using forloop to grow a dataframe object in a loop. Better to use `*apply` functions, then once the loop is complete, then add rownames for all at once. `rownames(dfTest) <- myColNamesVector` – zx8754 May 18 '18 at 08:29

1 Answers1

1

You don't have have to set the names individually

Just use:

dfTest <- data.frame(matrix(1,3,4))

dfName <- c("Ball", "Cat", "Dog")

rownames(dfTest) <- dfName
Shinobi_Atobe
  • 1,793
  • 1
  • 18
  • 35