Создать новый DF, используя подмножество - PullRequest
0 голосов
/ 13 октября 2018

Я работаю с набором документов, и мне нужно автоматизировать групповую работу и подмножество в новые файлы.Я могу сделать это вручную, но у меня есть более 200 документов с примерно 45 000 наблюдений в каждом, в результате чего получается более 1000 документов.Моя идея состояла в том, чтобы для каждого экземпляра уникального значения в моем df сохранить все значения с этим уникальным именем в df с этим именем.В следующем примере у меня теперь есть 3 кадра данных: ferrari, ford и audi.

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

В результате получается файл с именем df с 0 наблюдениями.Я также попробовал нормальный для меня в длину df.Любая помощь очень ценится - я определенно не привык писать для циклов.

Ответы [ 2 ]

0 голосов
/ 13 октября 2018

Решение Джорана элегантно, но возможно и с таким подходом, как ваш.Удобный однострочный цикл для сохранения всех подмножеств в файлы 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))
0 голосов
/ 13 октября 2018

Вам просто нужно 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, если вы хотите быть более изящными).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...