Создание наборов данных подмножеств в R на основе различных значений полей - PullRequest
0 голосов
/ 09 мая 2018

Я пытаюсь разбить набор данных на несколько подмножеств на основе различных значений полей. Например:

SaleID Country
Sale1 US
Sale2 Mexico
Sale3 US
Sale4 Canada
Sale5 Canada
Sale6 Mexico
Sale7 Canada

Желаемый выход (3 подмножества)

Data 1
SaleID Country
Sale1 US
Sale3 US

Data 2
SaleID Country
Sale2 Mexico
Sale6 Mexico


Data 3
Sale4 Canada
Sale5 Canada
Sale7 Canada

Есть идеи? Мой фактический набор данных имеет около 100 различных стран. Я исследовал использование пакета sqldf в R, но пока не повезло. Любая помощь будет оценена

Ответы [ 2 ]

0 голосов
/ 09 мая 2018

Было бы лучше создать список L этих наборов данных. Затем вы можете сослаться на L$US или L[["US"]], скажем, и ссылаться на все имена, используя names(L).

L <- split(DF, DF$Country)

Можно было бы скопировать их в отдельные фреймы данных в глобальной среде, используя следующую строку, но это не очень рекомендуется:

list2env(L, .GlobalEnv)
0 голосов
/ 09 мая 2018

Мы могли бы использовать split от base R до list из data.frame с. Порядок наборов данных, по-видимому, соответствует порядку, в котором значения unique отображаются в поле «Страна». В этом случае мы можем преобразовать «Страна» в столбец factor с levels указанным

df$Country <- factor(df$Country, levels = unique(df$Country))
lst <- lapply(split(df, df$Country), `row.names<-`, NULL)
names(lst) <- paste0("Data", seq_along(lst))

Лучше использовать list для обработки данных, чем иметь несколько объектов. Но если нам это действительно нужно, то list2env

list2env(lst, envir = .GlobalEnv)
Data1
#  SaleID Country
#1  Sale1      US
#2  Sale3      US

Data2
#  SaleID Country
#1  Sale2  Mexico
#2  Sale6  Mexico

Data3
#  SaleID Country
#1  Sale4  Canada
#2  Sale5  Canada
#3  Sale7  Canada
...