Как использовать substr в dplyr Выберите в R - PullRequest
0 голосов
/ 20 марта 2020

У меня есть датафрейм, из которого мне нужно выбрать несколько столбцов. Но для одного столбца мне просто нужна часть данных.

> df <- data.frame(doc_name = c('AXX_1324', 'BXX_3423', 'AXX_2343', 'BXX_3453', 'AXX_9872','AXX_9876'),
+                  Branch = c('AMM','GGM','AMM','CBB','GGM','GGM'),
+                  Revenue = rnorm(6,50,5))
> df
  doc_name Branch  Revenue
1 AXX_1324    AMM 55.95013
2 BXX_3423    GGM 43.63848
3 AXX_2343    AMM 47.31363
4 BXX_3453    CBB 47.59680
5 AXX_9872    GGM 46.94639
6 AXX_9876    GGM 45.28648
> df %>% select(doctype = substr(df$doc_name,1,3),Revenue)
Error: Unknown columns `AXX`, `BXX`, `AXX`, `BXX`, `AXX` and `AXX` 
Call `rlang::last_error()` to see a backtrace
> 

Ожидаемый вывод:

doctype   Revenue
AXX       55.95013
BXX       43.63848
AXX       47.31363
BXX       47.59680
AXX       46.94639
AXX       45.28648

Я также попытался использовать "substring" вместо substr, но получил ту же ошибку. Может ли кто-нибудь дать мне знать, как go об этом.

Ответы [ 2 ]

1 голос
/ 20 марта 2020

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

library(tidyr)
library(dplyr)
df %>% 
   separate(doc_name, into = c('doctype', 'other')) %>% 
   select(doctype, Revenue)
#  doctype  Revenue
#1     AXX 50.77699
#2     BXX 47.04387
#3     AXX 39.87008
#4     BXX 54.13617
#5     AXX 46.59901
#6     AXX 34.37392

или с str_remove в случае, если длина варьируется

library(stringr)
df %>% 
    transmute(doctype = str_remove(doc_name, "_.*"), Revenue)
1 голос
/ 20 марта 2020

Используйте mutate для изменения значений столбцов и select для выбора столбцов

library(dplyr)
df %>%
  mutate(doctype = substr(doc_name,1,3)) %>%
  select(doctype, Revenue)

#  doctype  Revenue
#1     AXX 54.25022
#2     BXX 45.37344
#3     AXX 54.46791
#4     BXX 45.29495
#5     AXX 52.69476
#6     AXX 49.09013

Как уже упоминалось @hendrikvanb, мы также можем использовать transmute здесь:

df %>% transmute(doctype = substr(doc_name,1,3), Revenue)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...