Подмножество оригинального фрейма данных с различными комбинациями двух факторных переменных - PullRequest
0 голосов
/ 28 марта 2019

У меня есть набор данных с 11 столбцами и 18350 наблюдениями, который имеет переменную компанию и регион. Существует 9 компаний (компания-0), распределенных по 5 регионам (регион-0-регион-5), и не все компании присутствуют во всех регионах. Я хочу создать отдельный фрейм данных для каждой комбинации компании и региона. Вы можете видеть вот так: company0-области1, company0-региона10, company0-региона7, Company1-region5, Общества2-region0, company3-REGION2, company4-регионе3, company5-региона7, company6-region6, company8-region9, company9-region8

Таким образом, мне нужно 11 различных фреймов данных в R. Нет других возможных комбинаций. Любой другой подход будет высоко оценен. Заранее спасибо

Я использовал функцию разделения, чтобы получить список -

p<-split(tsog1,list(tsog1$company),drop=TRUE)

Теперь у меня есть список фреймов данных, и я не могу преобразовать каждый элемент этого списка в отдельный фрейм данных.

Я тоже пытался использовать циклы, но не могу получить уникальный именованный фрейм данных.

v<-c(1:9)
p<-levels(tsog1$company)
for (x in v)
{
  x.tsog1<-subset(tsog1,tsog1$company==p[x])
}

Изображение набора данных

1 Ответ

0 голосов
/ 28 марта 2019

Вы можете создать столбец для комбинации региональной компании и разделить на этот столбец.

Например:

library(tidyverse)

# Create a df with 9 regions, 6 companies, and some dummy observations (3 per case)
df <- expand.grid(region = 0:8, company = 0:5, dummy = 1:3 ) %>% 
  mutate(x = round(rnorm((54*3)),2)) %>% 
  select(-dummy) %>% as_tibble()

# Create the column to split, and split.
df %>% 
  mutate(region_company = paste(region,company, sep = '_')) %>% 
  split(., .$region_company)

Теперь, что делать, когда у вас есть список фреймов данных, зависит от ваших следующих шагов.Если вы хотите, например, сохранить их, вы можете сделать walk или lapply.

Для сохранения:

df_list <- df %>% 
  mutate(region_company = paste(region,company, sep = '_')) %>% 
  split(., .$region_company)

iwalk(df_list,function(df, nm){
  write_csv(df, paste0(nm,'.csv'))
})

Или, если вы просто хотите получить к нему доступ:

> df_list$`0_4`
# A tibble: 3 x 4
  region company     x region_company
   <int>   <int> <dbl> <chr>         
1      0       4  0.54 0_4           
2      0       4  1.61 0_4           
3      0       4  0.16 0_4 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...