5

I want to create an empty data frame with one column holding character data and one column holding numeric data, and then populate that data frame.

dat<-as.data.frame(cbind(character(3),vector("numeric",3)))
dat
for (i in 1:3)
{
  dat[i,1]<-as.character("f")
  dat[i,2]<-i
}

dat

The results are below. As you can see I get all NA:

> dat
    V1   V2
1 <NA> <NA>
2 <NA> <NA>
3 <NA> <NA>

Can you advise how to do it?

GGamba
  • 13,140
  • 3
  • 38
  • 47
user3022875
  • 8,598
  • 26
  • 103
  • 167

3 Answers3

7

I don't know why you would want to do this, but here are some tips:

  1. Don't use as.data.frame(cbind(...))
  2. Make sure you use stringsAsFactors
  3. Use spaces in your code (makes things easier to read).

Thus, you can try:

dat <- data.frame(character(3), numeric(3), stringsAsFactors = FALSE)
dat
#   character.3. numeric.3.
# 1                       0
# 2                       0
# 3                       0

for (i in 1:3)
  {
      dat[i,1]<-as.character("f")
      dat[i,2]<-i
  }

dat
#   character.3. numeric.3.
# 1            f          1
# 2            f          2
# 3            f          3
A5C1D2H2I1M1N2O1R2T1
  • 190,393
  • 28
  • 405
  • 485
2

What about creating a really empty data frame and adding the appropriate data?

dat <- as.data.frame(matrix(ncol=2, nrow=0))
for(i in 1:3) {
  dat[i,1] = as.character('f')
  dat[i,2] = i
}
dat
##  V1 V2
##1  f  1
##2  f  2
##3  f  3
Barranka
  • 20,547
  • 13
  • 65
  • 83
0

I think you want to use stingsAsFactors = F

dat<-as.data.frame(cbind(character(3),vector("numeric",3)), stringsAsFactors = F)
blakeoft
  • 2,370
  • 1
  • 14
  • 15