Создать новый столбец на основе символов - PullRequest
1 голос
/ 17 апреля 2020

Если у меня есть похожая матрица:

Data = matrix(
  c('Ruppia A', 'Ruppia B', 'Ruppia C', 'Hydrobia A', 'Dog A', 'Cat A', 'Fresh',
    'Fresh', 'Fresh','Fresh', 'Dirt', 'House'),
  nrow=6,
  ncol=2,
  byrow=FALSE
)

Я хотел бы иметь возможность группировать похожие записи в один столбец без потери данных. Примерно так:

New_Data = matrix(
  c('Ruppia A', 'Ruppia B', 'Ruppia C', 'Hydrobia A', 'Dog A', 'Cat A', 'Fresh',
    'Fresh', 'Fresh','Fresh', 'Dirt', 'House', 'Ruppia', 'Ruppia', 'Ruppia',
    'Ruppia', 'Dog', 'Cat'),
  nrow=6,
  ncol=3,
  byrow=FALSE
)

Для некоторых записей мы могли бы просто go из рода (Ruppia), но не все группировки будут исключительно группироваться по родам и, возможно, придется объединить. Меня интересует только несколько видов для этого анализа, и он не обязательно нужен для возврата всех видов. В этом примере нас не интересуют «Собака» и «Кошка», и их можно было бы отбросить, если это облегчит задачу.

Ответы [ 3 ]

2 голосов
/ 17 апреля 2020

Если ваш новый столбец похож на ваш первый столбец, но с заглавной буквой после пропущенного пробела (например, «A»), то вы можете просто сделать это:

Data <- as.data.frame(Data) # turn into data frame first

Data %>% mutate(V1_new = gsub(" [A-Z]$", "", V1))
          V1    V2   V1_new
1   Ruppia A Fresh   Ruppia
2   Ruppia B Fresh   Ruppia
3   Ruppia C Fresh   Ruppia
4 Hydrobia A Fresh Hydrobia
5      Dog A  Dirt      Dog
6      Cat A House      Cat
1 голос
/ 17 апреля 2020

дополнительный раствор

Data %>% 
  as_tibble() %>% 
  tidyr::extract(V1, "out", remove = F)
1 голос
/ 17 апреля 2020

Мы можем использовать str_remove

library(dplyr)
library(stringr)
Data %>%
    as_tibble %>%
    mutate(V1_new = str_remove(V1, "\\s+[A-Z]$"))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...