добавить новый столбец на основе атрибутов группировки - PullRequest
0 голосов
/ 04 июля 2018

Я хочу добавить новый столбец в R, который объединяет мои подгруппы в группы.

Вот мой пример:

id = c(1,2,2,3,4,4,4,5,5,5,6,6,6)
subgroup = c("lightred","lightblue","darkblue","lightred","darkred","darkred","lightblue","darkgreen","darkgreen","lightgreen","darkred","darkblue","lightgreen")
data = data.frame(cbind(id,subgroup))

> data
   id   subgroup
1   1   lightred
2   2  lightblue
3   2   darkblue
4   3   lightred
5   4    darkred
6   4    darkred
7   4  lightblue
8   5  darkgreen
9   5  darkgreen
10  5 lightgreen
11  6    darkred
12  6   darkblue
13  6 lightgreen

Теперь я хочу добавить новый столбец «цвет», который группирует атрибуты в 3 группы: «красный», «зеленый» и «синий», независимо от того, светлые они или темные.

В конце должно выглядеть так:

   id   subgroup colour
1   1   lightred    red
2   2  lightblue   blue
3   2   darkblue   blue
4   3   lightred    red
5   4    darkred    red
6   4    darkred    red
7   4  lightblue   blue
8   5  darkgreen  green
9   5  darkgreen  green
10  5 lightgreen  green
11  6    darkred    red
12  6   darkblue   blue
13  6 lightgreen  green

Ответы [ 3 ]

0 голосов
/ 04 июля 2018

Хотя этот метод не так удобен, как другие, он довольно гибкий. Я изменил пример данных ops, чтобы показать, как вы можете объединить несколько групп, которые не следуют парадигме свет / темнота.

Edit:

Обновлено сообщение, чтобы ответить на вопрос оп в комментариях.

id = c(1,2,2,3,4,4,4,5,5,5,6,6,6)
subgroup = c("lightred","lightblue","cyan","lightred","water","darkred","lightblue","darkgreen","darkgreen","lightgreen","darkred","darkblue","lightgreen")
data = data.frame(cbind(id,subgroup))


library(dplyr)
data <- data %>% 
  dplyr::mutate(
    colour = dplyr::case_when(
      grepl("red"  , subgroup, fixed = TRUE) ~ "red",
      grepl("(blue)|(cyan)|(water)", subgroup, perl = TRUE) ~ "blue",
      grepl("green", subgroup, fixed = TRUE) ~ "green",
      TRUE ~ "else"
    )
  )
data
0 голосов
/ 04 июля 2018

С stringr

stringr::str_extract(data$subgroup,"red|green|blue")
 [1] "red"   "blue"  "blue"  "red"   "red"   "red"   "blue"  "green" "green" "green" "red"   "blue"  "green"



data$color=stringr::str_extract(data$subgroup,"red|green|blue")
data
   id   subgroup color
1   1   lightred   red
2   2  lightblue  blue
3   2   darkblue  blue
4   3   lightred   red
5   4    darkred   red
6   4    darkred   red
7   4  lightblue  blue
8   5  darkgreen green
9   5  darkgreen green
10  5 lightgreen green
11  6    darkred   red
12  6   darkblue  blue
13  6 lightgreen green
0 голосов
/ 04 июля 2018

Я думаю, sub должно работать здесь:

data$colour <- sub("^(?:light|dark)", "", data$subgroup)

Демо

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