Subset character columns from a data frame of characters and numbers

dataframe, r

Solution

Ok, I did a short try about my idea.

I could confirm that the following code snippet is working:

str(d)
 'data.frame':  5 obs. of  3 variables:
  $ a: int  1 2 3 4 5
  $ b: chr  "a" "a" "a" "a" ...
  $ c: Factor w/ 1 level "b": 1 1 1 1 1


# Get all character columns
d[, sapply(d, class) == 'character']

# Or, for factors, which might be likely:
d[, sapply(d, class) == 'factor']

# If you want to get both factors and characters use
d[, sapply(d, class) %in% c('character', 'factor')]

Using the correct class, your `sapply`-approach should work as well, at least as long as you insert the missing `,` before the `sapply` function.

The approach using `!is.numeric` does not scale very well if you have classes that do not belong in the group `numeric, factor, character` (one I use very often is `POSIXct`, for example)

Problem

I have a data frame composed of numeric and non-numeric columns. I would like to extract (subset) only the non-numeric columns, so the character ones. While I was able to subset the numeric columns using the string: `sub_num = x[sapply(x, is.numeric)]`, I'm not able to do the opposite using the `is.character` form. Can anyone help me?

Original source

Related problems