1

I have an object (var) that is subject to change containing the name of any variable of a data frame df. I'm trying to create a loop that can subset based on this variable's values.

df[df$var == "value", 3]
for(l in levels(outcome){
   for(i in names(df)){
      list <- table(df[df$i == l, 3])
   }
 }

The above loop should return a list of tables of each variable in the data frame when that variable is equal to a particular value.

Take for example the following toy data set:

df <- data.frame(person, salary, haircolor, outcome)
head(df)
          person salary haircolor  outcome
1       John Doe  21000    black   married
2     Peter Gynn  23400    blonde  divorced
3     Jolie Hope  26800    blonde  divorced
4      Tom Hanks  40000    brown   married
5 Angelina Jolie  20330    brown   divorced
6      Peter Pan  23020    blonde  married

The expected output is the following, if i = outcome (but i can be anything here, this is the point) for all values of l == married:

>table(df[df$outcome == 'married', 3])
black blonde  brown 
     2      1      0 

However, I want to emphasize that the variable name and value is meant to be looped over every single one, so is up for change.

2
  • You can use df[[i]]. Can you share what would your expected output look like ? Commented Sep 27, 2020 at 3:43
  • I just did @RonakShah :) Commented Sep 27, 2020 at 3:59

1 Answer 1

1

Maybe writing a function would help :

get_counts <- function(data, i, l) {
  table(data[data[[i]] == l, 3])
}

Then you can pass column name and value to subset from the dataframe and count using table

get_counts(df, 'outcome', 'married')

# black blonde  brown 
#     1      1      1 
Sign up to request clarification or add additional context in comments.

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.