如何从数据框中提取最后的,唯一的和连续的值

时间:2019-04-28 16:28:10

标签: r

我已经从.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 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

您可以从字符串中删除前导空格,然后使用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