Hello, Here is a dilemma I am having for a long time. But, I couldn't figure it out. I have an vector of Y and a data frame named "data",which contains all Xs. I tried to be more efficient in fitting a simple linear regression with each X. Firstly, for (i in 1:(dim(data)[2])){ model<-lm(Y~data[,i]) # this is not what I want since the name of coefficient will be data[,i] # I need coefficient name to be the name for each variable # for instance: # Coefficients: # (Intercept) data[, 1] # 24.2780 -0.3381 } Second try! I first create a vector of characters (Xs) that contains possible names of X. This vector is exactly the same as colnames of X. #my Xs Xs<-c("a","b","c") for (i in length(Xs)){ model<-lm(Y~data[,Xs[i]]) # Again, not what I want # Coefficients: # (Intercept) data[, Xs[1]] # 24.2780 -0.3381 } Thus, how can I solve this dilemma? I think about trying to find a function that can map the name of variable to values of that variable. That is, I first attach the data. I can type a to pull out values of data[,"a"] (a vector of numeric) directly. However, using Xs[1] will give me only "character" - "a". Thus, is there any function that allow me to pull values of dadta[,"a"] , eg, some_function(Xs[1]) give me values of data[,"a"] Any help is appreciated. Tony [[alternative HTML version deleted]]
Joshua Wiley
2010-Jul-28 12:59 UTC
[R] How to point a column of dataframe by a "character"
Hi Tony, I am sure there are other ways, but I would create formula objects and then pass them to lm(). Here's an example: mydata <- data.frame(Y = 1:10, X1 = 11:20, X2 = 21:30) my.names <- names(mydata)[-1] for(i in my.names) { my.formula <- formula(paste("Y ~ ", i, sep = "")) my.lm <- lm(my.formula, data = mydata) print(summary(my.lm)) } HTH, Josh On Wed, Jul 28, 2010 at 2:35 AM, Tony <lulala at gmail.com> wrote:> Hello, > > Here is a dilemma I am having for a long time. But, I couldn't figure it > out. > I have an vector of Y and a data frame named "data",which contains all Xs. I > tried to be more efficient in fitting a simple linear regression with each > X. > > > Firstly, > for (i in 1:(dim(data)[2])){ > model<-lm(Y~data[,i]) > # this is not what I want since the name of coefficient will be data[,i] > # I need coefficient name to be the name for each variable > # for instance: > # Coefficients: > ? ?# (Intercept) ? ?data[, 1] > ? ?# ? ? 24.2780 ? ? ? ? ? -0.3381 > } > > > Second try! > I first create a vector of characters (Xs) that contains possible names of > X. This vector is exactly the same as colnames of X. > > #my Xs > Xs<-c("a","b","c") > for (i in length(Xs)){ > model<-lm(Y~data[,Xs[i]]) > # Again, not what I want > # Coefficients: > ? ?# (Intercept) ? ?data[, Xs[1]] > ? ?# ? ? 24.2780 ? ? ? ? ? -0.3381 > } > > > Thus, how can I solve this dilemma? > I think about trying to find a function that can map the name of variable to > values of that variable. That is, I first attach the data. I can type a to > pull out values of data[,"a"] (a vector of numeric) directly. However, using > Xs[1] will give me only "character" - "a". Thus, is there any function that > allow me to pull values of dadta[,"a"] , eg, some_function(Xs[1]) give me > values of data[,"a"] > > Any help is appreciated. > > > Tony > > ? ? ? ?[[alternative HTML version deleted]] > > ______________________________________________ > R-help at r-project.org mailing list > https://stat.ethz.ch/mailman/listinfo/r-help > PLEASE do read the posting guide http://www.R-project.org/posting-guide.html > and provide commented, minimal, self-contained, reproducible code. >-- Joshua Wiley Ph.D. Student, Health Psychology University of California, Los Angeles http://www.joshuawiley.com/