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

У меня есть фрейм данных из pdf и некоторые тексты, которые должны быть в одной строке, теперь занимают разное количество строк, например:

df_missing = data.frame(group = c("East","","","West","","",""), 
                        order = c("this","is supposed to be","one line","this","is supposed to be","one line","too"))

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

df_correct = data.frame(group = c("East","West"), order = c("this is supposed to be one line", "this is supposed to be one line too"))

Ответы [ 2 ]

0 голосов
/ 06 июня 2018

Подобные понятия, как @ akrun

data.table решение:

library(data.table)
setDT(df_missing)[,.(group=group[1], order = paste(order, collapse= ' ')),by=cumsum(group != "")][,-1]

#   group                               order
#1:  East     this is supposed to be one line
#2:  West this is supposed to be one line too
0 голосов
/ 06 июня 2018

Мы можем сделать это несколькими способами.Один из способов - создать группу, взяв кумулятивную сумму логического вектора на основе непустых элементов в 'group' и summarise 'order' путем paste объединения элементов

library(dplyr)
df_missing  %>%
      group_by(group1 = cumsum(group != "")) %>% 
      summarise(group = first(group), order = paste(order, collapse= ' ')) %>% 
      select(-group1)
# A tibble: 2 x 2
#  group order                              
#  <fct> <chr>                              
#1 East  this is supposed to be one line    
#2 West  this is supposed to be one line too

Или вместо создания нового столбца группировки используйте cumsum в качестве индекса для заполнения unique непустых элементов в 'group'

df_missing %>%
     group_by(group = unique(group[group!=""])[cumsum(group != "")])  %>% 
     summarise(order = paste(order, collapse=' '))

Другой вариант - изменить пустое значение наNA, затем fill с предшествующими значениями, отличными от NA, сгруппированными по 'group', paste в порядке, указанном выше

library(tidyr)
df_missing %>%
     mutate(group = replace(group, group == '', NA)) %>% 
     fill(group) %>% 
     group_by(group) %>%
     summarise(order = paste(order, collapse= ' '))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...