我有一个包含11列和18350个观察值的数据集,其中有一个可变的公司和地区。有9家公司(company-0)分布在5个地区(region-0到region-5),并非所有公司都存在于所有地区。我想为公司和region.You的每个组合创建一个独立的数据框架,如下所示-公司0-区域1,公司0-区域10,公司0-区域7,公司1-区域5,公司2-区域0,公司3-区域2,公司4-区域3,公司5-区域7,公司6-区域6,公司8-区域9,公司9-区域8
因此,我在R.No中需要11个不同的数据帧,其他组合也是可能的,任何其他方法都将受到高度赞赏。提前感谢
我用split函数得到了一个列表-
p<-split(tsog1,list(tsog1$company),drop=TRUE)现在我有了一个数据帧列表,并且我不能将该列表中的每个元素转换为单独的数据帧。
我也尝试过使用循环,但无法获得唯一命名的dataframe。
v<-c(1:9)
p<-levels(tsog1$company)
for (x in v)
{
x.tsog1<-subset(tsog1,tsog1$company==p[x])
}发布于 2019-03-29 00:35:07
您可以为区域公司组合创建一列,并按该列拆分。
例如:
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 https://stackoverflow.com/questions/55402549
复制相似问题