使用all.equal删除R数据框中的非相似行

时间:2018-04-19 22:24:46

标签: r

我想删除MonthMo列相隔超过1个月的数据框中的所有行。我听说你可以用all.equal(df$Month, df$Mo, 1)做到这一点,但它只是返回一个字符串。这可能在R?

Row Month Mo
1   1     1
1   2     4 #<-Remove

2 个答案:

答案 0 :(得分:1)

您可以使用dplyr

执行某些操作
library(dplyr)

df %>% 
    filter(Month == Mo | Month == Mo+1 | Month == Mo-1) 

答案 1 :(得分:1)

根据?all.equal文档,all.equal的返回值为

  

TRUE(attr.all.equal为NULL)或描述目标与当前之间差异的模式“character”向量。

所以不,你不能用all.equal来做,因为它返回一个值。您可以在文档中查看有关函数功能的更多详细信息。

要做你想做的事,你可以使用普通的R:

d <- data.frame(Row = 1:2, Month = 1:2, Mo = c(1,4)) # your data.frame
#   Row Month Mo
# 1   1     1  1
# 2   2     2  4

d[!(abs(d$Month - d$Mo) > 1),] # d without rows where Month and Mo are far apart.
#   Row Month Mo
# 1   1     1  1

或等效

d[abs(d$Month - d$Mo) <= 1,]