Разделите один ряд на несколько рядов, сохраняя разделитель без изменений - PullRequest
1 голос
/ 13 января 2020

Я пытаюсь разделить одну строку в моем наборе данных на несколько строк, не затрагивая разделитель.

This is a sample of my input data set
|---------------------|----------------------------------------------- |
|      Group          |     Rules                                      |
|---------------------|----------------------------------------------- |
|          1          | 1. Teams must be split into two                |
|                     | 2. Teams must have ten players in each team    | 
|                     | 3. Each player must bring their own gear       |
|---------------------|----------------------------------------------- |

Когда я использую функцию Strsplit, я получаю следующий вывод:

df = data.frame(rules =unlist(strsplit(as.character(df$Rules),"?=[[digits]]", perl = T)))

|---------------------|----------------------------------------------- |
|      Group          |     Rules                                      |
|---------------------|----------------------------------------------- |
|          1          | 1                                              |
|--------------------------------------------------------------------- |                           
           1          | .Teams must be split into two                  |
|--------------------------------------------------------------------- |
|          1          | 2                                              |
|--------------------------------------------------------------------- |                           
           1          | .Teams must have ten players in each team      |
|--------------------------------------------------------------------- |

Мой желаемый вывод

|---------------------|----------------------------------------------- |
|      Group          |     Rules                                      |
|---------------------|----------------------------------------------- |
|           1         | 1.Teams must be split into two                 |
|--------------------------------------------------------------------- |                           
|           1         | 2.Teams must have ten players in each team     |
|--------------------------------------------------------------------- |

1 Ответ

0 голосов
/ 13 января 2020

Вот способ свернуть каждое число следующей строкой символов в столбце Rules. Выдает предупреждения, а не ошибки.

grp <- cumsum(!is.na(as.numeric(df$Rules)))
res <- lapply(split(df, grp), function(X){
  data.frame(Group = X[[1]][1],
             Rules = paste(X[[2]], collapse = ""))
})
res <- do.call(rbind, res)

res
#  Group                                      Rules
#1     1             1.Teams must be split into two
#2     1 2.Teams must have ten players in each team

Данные.

df <- data.frame(Group = rep(1, 4),
                 Rules = c(1, ".Teams must be split into two",
                           2, ".Teams must have ten players in each team"),
                 stringsAsFactors = FALSE)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...