R: сопоставление столбца индикатора с тем, что составляет столбец - PullRequest
0 голосов
/ 21 марта 2019

Я кодирую в R и у меня есть данные для региона, такие как:

data <- data.frame(Region = c("Cali", "NYC", "LA", "Vegas"), 
                   Group = c(1,2,2,1), stringsAsFactors = F)

enter image description here

Регионы объединены в группы. Столбец группы сообщает, какие регионы являются частью группы. Как я могу написать, что когда у меня есть информация о группе, я могу пойти и найти регионы, которые составляют эту группу. Любая помощь очень ценится.

Ответы [ 2 ]

1 голос
/ 21 марта 2019

Самое главное и для будущих сообщений, пожалуйста

  1. включает образцы данных в воспроизводимом и копируемом и вставляемом формате, например, с помощью dput
  2. воздержитесь от добавления лишних утверждений, таких как "Это очень срочно!"

Что касается вашего вопроса, сначала я сгенерирую некоторые примеры данных

set.seed(2018)
df <- data.frame(
    Region = sample(letters, 10),
    Group = sample(1:3, 10, replace = T))

Я рекомендую суммировать / агрегировать данные по Group, что облегчит извлечение информации для конкретных Group с.

Например, в базе R вы можете агрегировать данные на основе Group и объединять все Region s за Group

aggregate(Region ~ Group, data = df, FUN = toString)
#  Group        Region
#1     1             m
#2     2    i, l, g, c
#3     3 b, e, k, r, j

Или, альтернативно, вы можете хранить все Region s за Group в list

aggregate(Region ~ Group, data = df, FUN = list)
#  Group        Region
#1     1             m
#2     2    i, l, g, c
#3     3 b, e, k, r, j

Обратите внимание, что, хотя выходные данные выглядят одинаково, toString создает строку character, в то время как list хранит Region s в list. Последний может быть лучшим форматом для последующей обработки.


Аналогичные выходы могут быть достигнуты при использовании dplyr

library(dplyr)
df %>%
    group_by(Group) %>%
    summarise(Region = toString(Region))
1 голос
/ 21 марта 2019

Итак, с небольшим воспроизводимым примером,

data <- data.frame(Region = c("Cali", "NYC", "LA", "Vegas"), Group = c(1,2,2,1),stringsAsFactors=F)

мы видим следующие результаты, скажем, мы хотим, чтобы все из группы 1

group.number = 1
data[data$Group == group.number,"Region"]
[1] Cali  Vegas

Или используя dpyr

library(dplyr)
group.number = 1
data %>%
  filter(Group == group.number)%>%
.$Region

Или от Джилбера Урбины (гораздо более читабельно)

subset(data, Group==1)$Region
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...