[R] How to automatically create data frames from an existing one?

Tunga Kantarcı tungakantarci at gmail.com
Wed Jan 11 12:53:11 CET 2017


I have a data frame that includes several columns representing
variables and variables names are indicated at the top row of the data
frame. That is, I had a csv file where variable names were stored in
the top row, and when I imported the csv file to R, R created a data
frame that appears with the name rwrdatafile (custom name I gave)
where I can see all the variables with their names on the top row in
RStudio. For example, one of the columns stores wage data and I can
create a stand alone data frame (shall I call it a vector data frame?)
for wage, but do this for all variables.

That is, I can execute the command

wage = rwrdatafile[,1,drop=FALSE]

which nicely creates wage and RStudio shows it as data in its
environment window and if I click on it, I can inspect it in a spread
sheet like view and work with that data say in regression analysis.

The problem is that there are many variables stored in the data frame
rwrdatafile, and it is very tedious to repeat the above mentioned
routine for each variable. Hence I attempted to write a for loop for
this but it helped to no avail.

In particular, I tried

for (i in 1:k){
  assign(names(rwrdatafile)[i],rwrdatafile[,i])
}

and in fact this nicely assigns each column in the data frame to a
name, but I do not see the variables as data in the environment
section. But what I need are variables that I can work with in matrix
operations.

I also tried

for(i in 1:k){
  names(rwrdatafile)[i] = rwrdatafile[,i,drop=FALSE]
}

thinking that this for loop would just repeat what I do for

wage = rwrdatafile[,1,drop=FALSE]

for all the variables in rwrdatafile.

Please note that I do need to use a for loop and in fact I need to
translate and imitate the MATLAB code below, which does the job in
MATLAB, as close as possible in R.

# MATLAB code generating variables from structure array rwrdatafile
[N,k] = size(rwrdatafile.data);
for i = 1:k
    eval([cell2mat(rwrdatafile.textdata(i)) '= rwrdatafile.data(:,i);'])
end



More information about the R-help mailing list