###原始数据
df1 <- data.frame(a=c(2,2,5,5,7), b=c(1,5,4,7,6))
df2 <- data.frame(a=c(2,2,5,5,7,7), b=c(1,5,4,7,6,3))
当最后两行的a列值不相等时(此处第四行不等于第五行,即5!= 7),我只想对最后一行进行子集化。
#input
> df1
a b
1 2 1
2 2 5
3 5 4
4 5 7
5 7 6
#output
> df1
a b
1 7 6
当后两行的a列值相等时(这里第5行等于第6行,即7 = 7,我想对后两行进行子集化
#input
> df2
a b
1 2 1
2 2 5
3 5 4
4 5 7
5 7 6
6 7 3
#output
> df2
a b
1 7 6
2 7 3
答案 0 :(得分:3)
您可以编写一个函数来检查a
列的最后两行值:
return_rows <- function(data) {
n <- nrow(data)
if(data$a[n] == data$a[n - 1])
tail(data, 2)
else tail(data, 1)
}
return_rows(df1)
# a b
#5 7 6
return_rows(df2)
# a b
#5 7 6
#6 7 3
答案 1 :(得分:1)
尝试一下
library(tidyverse)
df %>%
filter(a == last(a))
a b
5 7 6
a b
5 7 6
6 7 3
答案 2 :(得分:0)
我们可以使用subset
中的base R
subset(df1, a == a[length(a)])