Как извлечь определенную строку c и сделать его столбцом в R? - PullRequest
2 голосов
/ 06 марта 2020

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

Causenum<-c("TIMOTHY JAMES", "Disp Type/Case ID","DTCGL","CR01785",
            "CR02099","DTCNG","CR01061","CR01329") 

case<-c(NA,"Description","Tried by Court - Guilty","ST V WILLIAMS","ST V YOUNG III","Tried by Court - 
Not Guilty",
        "ST V HARRISON","ST V GOMEZ")

data.frame(Causenum,case)

           Causenum                        case
1     TIMOTHY JAMES                        <NA>
2 Disp Type/Case ID                 Description
3             DTCGL     Tried by Court - Guilty
4           CR01785               ST V WILLIAMS
5           CR02099              ST V YOUNG III
6             DTCNG Tried by Court - Not Guilty
7           CR01061               ST V HARRISON
8           CR01329                  ST V GOMEZ

Два столбца содержат много информации, которая должна быть там. По сути, я хочу убедиться, что все строки ниже DTCGL сгруппированы по DTCGL и одинаковы для DTCNG

, чтобы все выглядело следующим образом

  Causenum               case            newcol                      
  CR01785               ST V WILLIAMS    DTCGL
  CR02099               ST V YOUNG III   DTCGL
  CR01061               ST V HARRISON    DTCNG
  CR01329               ST V GOMEZ       DTCNG

как это сделать Я делаю это?

Ответы [ 3 ]

2 голосов
/ 06 марта 2020

Мы можем создать столбец группировки на основе элементов в «Causenum» со значениями «DT C», создать «newcol» с элементом first в «Causenum» и filter из строк которые 'CRO' от 'Causenum'

library(dplyr)
library(stringr)
df1 %>%
    group_by(grp = cumsum(str_detect(Causenum, "^DTC"))) %>% 
    na.omit %>% 
    mutate(newcol = first(Causenum)) %>%
    ungroup %>% 
    filter(str_detect(Causenum, "CR0")) %>%
    select(-grp)
# A tibble: 4 x 3
#  Causenum case           newcol
#  <chr>    <chr>          <chr> 
#1 CR01785  ST V WILLIAMS  DTCGL 
#2 CR02099  ST V YOUNG III DTCGL 
#3 CR01061  ST V HARRISON  DTCNG 
#4 CR01329  ST V GOMEZ     DTCNG 
1 голос
/ 06 марта 2020

Мы можем получить все переменные, которые начинаются с "DTC" в новом столбце, fill пропущенные значения и удалить первую строку из каждой группы.

library(dplyr)

df %>%
  mutate(newcol = replace(Causenum, !grepl('^DTC', Causenum), NA)) %>%
  tidyr::fill(newcol) %>%
  na.omit %>%
  group_by(newcol) %>%
  slice(-1L)

# Causenum case           newcol
#  <fct>    <fct>          <fct> 
#1 CR01785  ST V WILLIAMS  DTCGL 
#2 CR02099  ST V YOUNG III DTCGL 
#3 CR01061  ST V HARRISON  DTCNG 
#4 CR01329  ST V GOMEZ     DTCNG 
1 голос
/ 06 марта 2020

Базовый раствор R:

df1=df1[which(df1$Causenum=="DTCGL"):length(df1$Causenum),]
df1$newcol=ifelse(seq_along(df1$Causenum)>=which(df1$Causenum=="DTCNG"),"DTCNG","DTCGL")
df1=df1[!startsWith(as.character(df1$Causenum),"DT"),]

#  Causenum           case newcol
#4  CR01785  ST V WILLIAMS  DTCGL
#5  CR02099 ST V YOUNG III  DTCGL
#7  CR01061  ST V HARRISON  DTCNG
#8  CR01329     ST V GOMEZ  DTCNG
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...