首页 > 解决方案 > 如何根据最后两行的值对 data.frame 进行子集化?

问题描述

###原始数据

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列值不相等时(这里第4行不等于第5行,即5!= 7),我只想对最后一行进行子集化。

#输入

 > df1
      a b
    1 2 1
    2 2 5
    3 5 4
    4 5 7
    5 7 6

#输出

> df1
  a b
1 7 6

当最后两行的a列值相等时(这里第5行等于第6行,即7=7,我想对最后两行进行子集化

#输入

> df2
  a b
1 2 1
2 2 5
3 5 4
4 5 7
5 7 6
6 7 3

#输出

> df2
  a b
1 7 6
2 7 3

标签: r

解决方案


您可以编写一个函数来检查acolumn 的最后两行值:

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

推荐阅读