[R] add a row to a data frame

Marc Schwartz marc_schwartz at comcast.net
Thu Sep 27 17:41:53 CEST 2007


On Thu, 2007-09-27 at 17:16 +0200, Alfredo Alessandrini wrote:
> Hi everybody,
> 
> I've a data.frame "d" like this:
> 
>           0   2    4    6    8   10   12  14  16         X0          X2
>       X4
> 1945 350  NA  NA  NA  NA  NA  NA  NA  NA  0.3848451  0.0000000 0.0000000
> 1946 408  NA  NA  NA  NA  NA  NA  NA  NA  1.4202009  0.0000000 0.0000000
> 1947 511  NA  NA  NA  NA  NA  NA  NA  NA  3.2540522  0.0000000 0.0000000
> 1948 342 215  NA  NA  NA  NA  NA  NA  NA  3.0943431  0.1452201 0.0000000
> 1949 217 259  NA  NA  NA  NA  NA  NA  NA  2.3444544  0.5606204 0.0000000
> 1950 204 322  NA  NA  NA  NA  NA  NA  NA  2.4738157  1.2847229 0.0000000
> 1951 310 369  NA  NA  NA  NA  NA  NA  NA  4.2598111  2.2732847 0.0000000
> 1952 284 254 204  NA  NA  NA  NA  NA  NA  4.4325108  2.0619404 0.1307405
> 1953 437 390 158  NA  NA  NA  NA  NA  NA  7.8102915  3.9550138 0.2809463
> 1954 444 356 343  NA  NA  NA  NA  NA  NA  9.1642771  4.4445494 1.1497632
> 1955 299 250 217  NA  NA  NA  NA  NA  NA  6.8693657  3.5971236 1.1091676
> 1956 318 280 161  NA  NA  NA  NA  NA  NA  7.9222799  4.4949908 1.0141218
> 1957 220 216 169  NA  NA  NA  NA  NA  NA  5.8526614  3.8041420 1.2397196
> 1958 208 189 133  NA  NA  NA  NA  NA  NA  5.8131025  3.5690974 1.1018225
> 1959 247 228 127  NA  NA  NA  NA  NA  NA  7.2561271  4.6042679 1.1558516
> 1960 283 259 131  NA  NA  NA  NA  NA  NA  8.7849078  5.6265453 1.2984360
> 1961 304 236 135  NA  NA  NA  NA  NA  NA  9.9974023  5.4938916 1.4508974
> 1962 215 150  96  NA  NA  NA  NA  NA  NA  7.4210859  3.6737784 1.1014173
> 1963 242 183 122  NA  NA  NA  NA  NA  NA  8.7004775  4.6734552 1.4832716
> 1964 250 194 170 230  NA  NA  NA  NA  NA  9.3745125  5.1841431 2.2228025
> 1965 201 163 164 343  NA  NA  NA  NA  NA  7.8218965  4.5385615 2.3164345
> 
> And another "X" like this :
> 
>  [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11] [,12]
> [1,]   NA   NA   NA   NA   NA   NA   NA   NA   NA    NA    NA    NA
> [2,]   NA   NA   NA   NA   NA   NA   NA   NA   NA    NA    NA    NA
> [3,]   NA   NA   NA   NA   NA   NA   NA   NA   NA    NA    NA    NA
> [4,]   NA   NA   NA   NA   NA   NA   NA   NA   NA    NA    NA    NA
> [5,]   NA   NA   NA   NA   NA   NA   NA   NA   NA    NA    NA    NA
> 
> 
> If I try to add X to d, I've an error like this:
> 
> rbind(X,d)
> Errore in match.names(clabs, names(xi)) : names do not match previous names
> 
> Why?

In ?rbind under data frame methods, it clearly states:

The rbind data frame method first drops all zero-column and zero-row
arguments. (If that leaves none, it returns the first argument with
columns otherwise a zero-column zero-row data frame.) It then takes the
classes of the columns from the first data frame, and matches columns by
name (rather than by position).


You appear to be rbind()ing a matrix "X" to the data frame "d". In that
case, the data frame method is used and since "X" does not have any
column names, rbind cannot match the columns in the two objects and you
get the error message you see.

Try this instead:

  # set X's colnames to match d's
  colnames(X) <- colnames(d)

  # Now rbind()
  rbind(d, X)

HTH,

Marc Schwartz



More information about the R-help mailing list