lf_araujo
lf_araujo

Reputation: 2063

Retrieving variable names for numeric variables

I need to run through a large data frame and extract a vector with the name of the variables that are numeric type.

I've got stuck in my code, perhaps someone could point me to a solution.

This is how far I have got:

numericVarNames <- function(df) {
    numeric_vars<-c()
    for (i in colnames(df)) {
        if (is.numeric(df[i])) {
            numeric_vars <- c(numeric_vars, colnames(df)[i])
            message(numeric_vars[i])
        }
    }
    return(numeric_vars)
}

To run it:

teste <-numericVarNames(semWellComb)

The is.numeric assertion is not working. There is something wrong with my syntax for catching the type of each column. What is wrong?

Upvotes: 1

Views: 1788

Answers (2)

sconfluentus
sconfluentus

Reputation: 4993

Without test data it is hard to be sure, but it looks like there is just a "grammar" issue in your code.

You wrote:

            numeric_vars <- c(numeric_vars, colnames(df)[i])

The way to get the column name into the concatenated list is to include the whole referred to subset in the parentheses:

        numeric_vars <- c(numeric_vars, colnames(df[i]))

Try running it with that one change and see what you get.

Upvotes: 1

SymbolixAU
SymbolixAU

Reputation: 26258

Rather than a looping function, how about

df <- data.frame(a = c(1,2,3),
                 b = c("a","b","c"),
                 c = c(4,5,6))


## names(df)[sapply(df, class) == "numeric"]
## updated to be 'safer'
names(df)[sapply(df, is.numeric)]
[1] "a" "c"
## As variables can have multiple classes

This question is worth a read

Upvotes: 3

Related Questions