Как извлечь последние, уникальные и последовательные значения из фрейма данных - PullRequest
0 голосов
/ 28 апреля 2019

Я извлек из файла .txt определенные строки и соответствующие строки в кадр данных.Как я могу извлечь последние, уникальные, последовательные значения из него в новый фрейм данных?

Вот пример df:

```
Line <- c(seq(from = 1, length.out = 9, by = 421), 4211)
string <- rep(c("Plate 1", "Plate 2", " Plate 3"))
Text <- c(rep(string, length.out = 9), "Plate 3")

df <- data.frame(Line = Line,
                 Text = Text )
```

Вот что я пытаюсь получить:

```

my_df <- data.frame(Line = c(2527, 2948, 3369),
                    Text = c("Plate 1", "Plate 2", "Plate 3"))
```

Я попытался нарезать его примерно так:

```
df %>% group_by(Text) %>% slice(unique(last(n())))
```

Но это дает дубликат с неправильной строкой.

Есть ли способ посмотреть на последовательные значения вR, а не просто убрать последнюю строчку?

Ответы [ 2 ]

1 голос
/ 28 апреля 2019

Определите n как длину string, а затем используйте rollapplyr, чтобы найти индексы правых концов последовательностей, равные trimws(string). Возьмите последнюю и используйте seq, чтобы получить соответствующую последовательность из ее правой конечной точки, а затем, наконец, подстрочный индекс df.

library(zoo)

n <- length(string)
r <- rollapplyr(as.character(df$Text), n, identical, trimws(string), fill = FALSE)
df[seq(to = tail(which(r), 1), length = n), ]

дает:

  Line    Text
7 2527 Plate 1
8 2948 Plate 2
9 3369 Plate 3
0 голосов
/ 28 апреля 2019

Вы можете удалить начальный пробел из строк и затем использовать rle для удаления дубликатов

df$Text <- stringr::str_trim(df$Text)
df[cumsum(rle(df$Text)$lengths) > 1,] %>%
  group_by(Text) %>%
  filter(row_number() == n())
# A tibble: 3 x 2
# Groups:   Text [3]
   Line Text   
  <dbl> <chr>  
1  2527 Plate 1
2  2948 Plate 2
3  3369 Plate 3
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...