如何根据最后两行的值对data.frame进行子集化?

时间:2020-09-03 03:05:03

标签: r

###原始数据

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

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)])
相关问题