【问题标题】:Filtering Rows with duplicate column values过滤具有重复列值的行
【发布时间】:2021-10-04 08:07:36
【问题描述】:

我正在为班级清理数据集。我注意到有一些负值。某些具有此条件的行在第 2 列和第 3 列中也具有相同的 id 名称。

我被难住了。我正在尝试起草一个代码,但不确定我应该从哪里开始。我很想得到建议。我找不到类似的东西。

下面是一个与我的表类似的示例表。

df <- data.frame(A=c(1,2,4,7,8), B=c(2,2,4,9,9), C=c(0,1,5,3,4))

我是否使用嵌套在 filter() 中的 ifelse ()?我想过滤一个没有在 A 列和 B 列中具有重复值的行的数据表。以上面的表为例,什么代码会导致取回第 1、4 和 5 行?

(抱歉,上面的示例一直以代码而不是表格的形式出现。)

【问题讨论】:

  • 我不明白你的过滤逻辑。根据什么条件,您要取消第 2 行和第 3 行?您是否正在寻找 df %&gt;% filter(A != B) 和包裹 dplyr
  • 如果您只想过滤第 2 行和第 3 行,请执行以下操作:df[-c(2:3), ]。否则你需要指定过滤逻辑。
  • 嗨,为了澄清,我发现我的一些行有重复的列。如果我使用 filter(),人们会建议我如何过滤在 A 列和 B 列中没有重复的行?
  • @TimTeaFan 我没有考虑过索引。我会查找并了解更多信息,谢谢!
  • @MartinGal 哦!我没有考虑布尔值!我现在要试试。谢谢!

标签: r if-statement data.table boolean filtering


【解决方案1】:

到目前为止,这个问题还没有得到正确的答案。

如果我理解正确,OP 想知道如何删除/过滤列 AB 具有相同值的那些行。或者,换句话说,如何保留AB 不同的那些行。

这是一个基本问题,R 中有不同的方法可以解决:

基础 R

df[df$A != df$B, ]

subset(df, A != B)

dplyr

正如Martin Gal's comment中已经提到的那样

dplyr::filter(df, A != B)

数据表

因为问题被标记为

data.table::setDT(df)[A != B]

全部返回第 1、4 和 5 行,例如,

  A B C
1 1 2 0
4 7 9 3
5 8 9 4

不需要ifelse()

数据

df <- data.frame(
  A = c(1, 2, 4, 7, 8),
  B = c(2, 2, 4, 9, 9),
  C = c(0, 1, 5, 3, 4)
)

【讨论】:

  • 这是一个很棒的解决方案列表!我还可以想到这些可能适用的几个实例。非常感谢!
猜你喜欢
  • 2015-07-06
  • 1970-01-01
  • 1970-01-01
  • 2019-03-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-07
  • 1970-01-01
相关资源
最近更新 更多