【问题标题】:Conditionally removing duplicates based on several conditions in R根据 R 中的几个条件有条件地删除重复项
【发布时间】:2020-05-22 16:19:41
【问题描述】:

现在我假设有下表:

.1 .2 .3
.2 1 C
.2 1 C
.2 1 C
.3 1 N
.3 1 N
.4 1 N
.4 1 N
.4 1 N
.4 1 N

鉴于第 2 列相同且第 1 列的值不同,我们只想保留第 3 列包含 C 的行。这应该会产生下表:

.1 .2 .3
.2 1 C
.2 1 C
.2 1 C

我已经看过以下问题:
Remove duplicates based on 2nd column condition
R, conditionally remove duplicate rows
Conditionally removing duplicates in R

您知道如何实现这一目标吗?

【问题讨论】:

  • 第 1 列的值有何不同?我只看到2
  • 第 1 列是值为 2,3 和 4 的列。第一行是“标题”

标签: r


【解决方案1】:

我不确定我是否完全理解您需要做什么,但这里尝试使用简单的If 语句检查两列的方差,即

if (var(dd3$X1) != 0 & var(dd3$X2) == 0) { dd3 <- subset(dd3, X3 == 'C')}
dd3
#  X1 X2 X3
#1  2  1  C
#2  2  1  C
#3  2  1  C

在哪里,

dput(dd3)
structure(list(X1 = c(2L, 2L, 2L, 3L, 3L, 4L, 4L, 4L, 4L), X2 = c(1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L), X3 = structure(c(1L, 1L, 1L, 
2L, 2L, 2L, 2L, 2L, 2L), .Label = c("C", "N"), class = "factor")), class = "data.frame", row.names = c(NA, -9L))

【讨论】:

    【解决方案2】:

    我不完全理解您所说的“鉴于第 2 列是相同的”是什么意思。你可以使用subset

    subset(df, df$col3 == "C" & df$col1 != df$col2)
    

    我使用 col1、col2 和 col3 作为标题

    【讨论】:

      【解决方案3】:

      也许您可以使用ave 尝试以下基本 R 代码,即,

      dfout <- subset(df,as.logical(ave(X3,X1,X2,FUN = function(v) v=="C")))
      
      # > dfout
      #    X1 X2 X3
      # 1  2  1  C
      # 2  2  1  C
      # 3  2  1  C
      

      数据

      df <- structure(list(X1 = c(2L, 2L, 2L, 3L, 3L, 4L, 4L, 4L, 4L), X2 = c(1L, 
      1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L), X3 = c("C", "C", "C", "N", "N", 
      "N", "N", "N", "N")), row.names = c(NA, -9L), class = "data.frame")
      

      【讨论】:

        猜你喜欢
        • 2021-06-20
        • 2022-08-15
        • 2017-09-12
        • 1970-01-01
        • 2018-02-17
        • 2020-02-17
        • 1970-01-01
        • 2012-06-05
        • 1970-01-01
        相关资源
        最近更新 更多