使用子集创建新的df

时间:2018-10-12 21:39:39

标签: r

我正在处理一组文档,需要将groupby和子集自动化到新文件中。我可以手动完成此操作,但是有200多个文档,每个文档中有大约45,000个观察值,因此产生了1,000多个文档。我的想法是让df中的每个唯一值实例将具有该唯一名称的所有值保存到具有该名称的df中。在下面的示例中,我现在有3个数据框,分别是:法拉利,福特和奥迪。

value <-  c(1:10)
name <-  c("ferrari","ferrari","ferrari","ford","ford","ford","ford","audi","audi","audi")
data <- data.frame(value,name)
uniques <- unique(data$name)

for(file in uniques){
  file <- subset(data, data$Name == file)
}

这只会导致一个名为0观测值的DF文件。我也尝试过我在长度df中的法线。非常感谢任何帮助-我绝对不习惯编写循环。

2 个答案:

答案 0 :(得分:4)

您只需要split

> split(x = data,f = data$name)
$audi
   value name
8      8 audi
9      9 audi
10    10 audi

$ferrari
  value    name
1     1 ferrari
2     2 ferrari
3     3 ferrari

$ford
  value name
4     4 ford
5     5 ford
6     6 ford
7     7 ford

将根据您的要求生成三个数据帧,分别为audi,ferrari和ford。您希望对每个子集做的任何进一步操作都可以在此列表中的一个简单的for循环中完成(或者,如果您愿意,可以使用lapply或purrr的工具)。

答案 1 :(得分:1)

joran的解决方案很优雅,但是也可以通过您自己的方法来解决。简便的for-loop单线将所有子集保存到Excel文件中。

> audi.xlsx
   value name
8      8 audi
9      9 audi
10    10 audi

> ferrari.xlsx
  value    name
1     1 ferrari
2     2 ferrari
3     3 ferrari

> ford.xlsx
  value name
4     4 ford
5     5 ford
6     6 ford
7     7 ford

代码

for(i in 1:length(uniques)){
    write.xlsx(subset(data, data$name == uniques[i]), paste0(uniques[i], ".xlsx"))
}

数据

library(xlsx)
data <- data.frame(value = c(1:10),
                   name = c(rep("ferrari",3), rep("ford",4), rep("audi",3)))
uniques <- unique(as.character(data$name))