0

I have a dataframe with thousands of rows. I would like to generate a separate dataframe per Country using filter. Is there a way I could do this in one command, instead of manually repeating the code per Country?

Country_List <- c("India", "Japan", "Korea")

library(dplyr)

Dat %>% filter(grepl('Japan', Country))
Country Variable 1 Variable 2
India 1 B
Japan 2 B
Korea 2 C
India 1 D
Japan 2 C
Korea 3 C
India 3 A
Japan 2 A
India 1 A
Japan 1 B
Korea 3 D
Japan 2 B
Korea 4 C
Darren Tsai
  • 32,117
  • 5
  • 21
  • 51
Mikin
  • 25
  • 3
  • 1
    You should use `split`: `split(Dat, Dat$Country)`, or `group_split(Dat, Country)` in `dplyr` – Maël Mar 01 '23 at 13:22

1 Answers1

1

We could use group_split that will give you a list of tibbles

library(dplyr)

df |>
  group_split(Country)

Output:

[[1]]
# A tibble: 4 × 3
  Country Variable1 Variable2
  <chr>       <dbl> <chr>    
1 India           1 B        
2 India           1 D        
3 India           3 A        
4 India           1 A        

[[2]]
# A tibble: 5 × 3
  Country Variable1 Variable2
  <chr>       <dbl> <chr>    
1 Japan           2 B        
2 Japan           2 C        
3 Japan           2 A        
4 Japan           1 B        
5 Japan           2 B        

[[3]]
# A tibble: 4 × 3
  Country Variable1 Variable2
  <chr>       <dbl> <chr>    
1 Korea           2 C        
2 Korea           3 C        
3 Korea           3 D        
4 Korea           4 C       

Data:

library(readr)

df <- read_table("Country   Variable1   Variable2
India   1   B
Japan   2   B
Korea   2   C
India   1   D
Japan   2   C
Korea   3   C
India   3   A
Japan   2   A
India   1   A
Japan   1   B
Korea   3   D
Japan   2   B
Korea   4   C")
harre
  • 7,081
  • 2
  • 16
  • 28