用2个因子变量的不同组合对原始数据框进行分组

时间:2019-03-28 16:25:54

标签: r

我有一个包含11列和18350个观测值的数据集,该数据集具有可变的公司和地区。有9家公司(公司0)分布在5个地区(地区0到地区5),但并非所有公司都出现在所有地区。我想为公司和地区的每种组合创建一个单独的数据框。 company0-region1, company0-region10, 公司0-区域7, company1-region5, company2-region0, company3-region2, company4-region3, company5-region7, company6-region6, 公司8-区域9, company9-region8

因此我在R中需要11个不同的数据帧,没有其他组合是可能的 任何其他方法将不胜感激。 在此先感谢

我使用了拆分功能来获取列表-

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])
}

Dataset Image

1 个答案:

答案 0 :(得分:0)

您可以为地区公司组合创建一列,然后按该列拆分。

例如:

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)

现在,一旦有了数据帧列表,该怎么办取决于您的下一步。例如,如果要保存它们,可以执行walklapply

要保存:

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