#r
#r
Вопрос:
У меня есть набор данных с 11 столбцами и 18350 наблюдениями, который имеет переменную компанию и регион. Существует 9 компаний (company-0), распределенных по 5 регионам (от region-0 до region-5), и не все компании присутствуют во всех регионах. Я хочу создать отдельный фрейм данных для каждой комбинации компании и региона.Вы можете видеть следующим образом- company0-region1, company0-region10, company0-region7, company1-region5, company2-region0, company3-region2, company4-region3, company5-region7, company6-region6, company8-region9, company9-region8
Таким образом, мне нужно 11 разных фреймов данных в R.No возможны другие комбинации, любой другой подход был бы высоко оценен. Заранее спасибо
Я использовал функцию разделения для получения списка-
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. Можете ли вы добавить сюда воспроизводимые данные, чтобы мы могли вам помочь? Пожалуйста, добавьте
dput(data)
выходные данные в свой вопрос.2. привет!! Я новичок в stack, я хотел добавить набор данных, но мне интересно, как это сделать??
3. Как только вы прочитаете данные в своей
R
среде, запуститеdput(head(data))
, затем вставьте вывод сюда.
Ответ №1:
Вы можете создать столбец для комбинации компаний региона и разделить по этому столбцу.
Например:
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