我已经从.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中的连续值,而不仅仅是删除最后一行?
答案 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