Home > Back-end >  Grabs rows where second column is equal to value
Grabs rows where second column is equal to value

Time:12-08

I have a dataset which looks something like this:

print(animals_in_zoo)

// I only know the name of the first column, the second one is dynamic/based on a previously calculated variable 
animals | dynamic_column_name

// What the data looks like
elefant x
turtle
monkey
giraffe x
swan
tiger   x

What I want is to collect the rows in which the second columns' value is equal to "x".

What I want to do is something like:

SELECT * from data where col2 == "x";

After that, I want to grab only the first column and create a string object like "elefant giraffe tiger", but that is the easy part.

CodePudding user response:

You can reference that column by its index and use that to get the animals you want:

df1 <- structure(list(animal = c("elefant", "turtle", "monkey", "giraffe", 
                                 "swan", "tiger"), dynamic_column = c("x", NA, NA, "x", NA, "x"
                                 )), row.names = c(NA, -6L), class = "data.frame")

df1[, 1][df1[, 2] == "x" & !is.na(df1[, 2])]
#> [1] "elefant" "giraffe" "tiger"

CodePudding user response:

We could use filter with grepl which searches for a pattern 'x' in the string:

# the data frame

df <- read.table(header = TRUE, text = 
'my_col
"elefant x"
turtle
monkey
"giraffe x"
swan
"tiger   x"'
)

library(dplyr)

df %>% 
  filter(grepl('x', my_col))
   my_col
1 elefant x
2 giraffe x
3 tiger   x

CodePudding user response:

Use [: the first argument refers to the rows. You want the rows where the second column is "x". The second argument is the column you need in the end, and you want the column named "animals":

dat[dat[2] == "x", "animals"]
#[1] "elefant" "giraffe" "tiger" 

data

dat <- structure(list(animals = c("elefant", "turtle", "monkey", "giraffe", 
"swan", "tiger"), V2 = c("x", "", "", "x", "", "x")), row.names = c(NA, 
-6L), class = "data.frame")

#   animals V2
# 1 elefant  x
# 2  turtle   
# 3  monkey   
# 4 giraffe  x
# 5    swan   
# 6   tiger  x

CodePudding user response:

I guess you have a dataframe?

If so, something like df[df$col2 == 'x',] should work.

CodePudding user response:

With base functions, you can do it like this:

# Option 1
your_dataframe[your_dataframe$col2 == "x", ]

# Option 2
your_dataframe[your_dataframe[,2] == "x", ]

With dplyr functions, you can do it like this:

library(dplyr)

your_dataframe %>% 
  filter(col2 == "x")
  • Related