【问题标题】:Selecting a specific row with duplicate values in a column but a blank value in one of the columns of the duplicate rows in R选择一列中具有重复值的特定行,但在 R 中重复行的一列中选择一个空白值
【发布时间】:2017-10-27 18:12:42
【问题描述】:

我是堆栈溢出的新手。如果标题无法理解,我很抱歉。下次我会努力做得更好。

我有一个数据框,第一列中有重复值,但它们各自行中的最后一列行不同(很少有空白,其他可能有一些值)。我一直在尝试消除最后一列中带有空白字段的重复项,但每次我使用“duplicated()”或“unique()”函数时,我只剩下带有空白字段的行。这可能是因为行的排序方式使得空白字段位于最后一列中具有值的行上方。

例如, 输入:

 *No.   per         hmm        qty*
  1    BARBIE123     new         1
  2    AYLIK32     * N/A*        1
  3    AYLIK32       new         1
  4     BARB         mid         1

我不断得到的输出:

*No.   per      hmm        qty*
1    BARBIE    new         1
2    AYLIK   * N/A*        1
4     BARB     mid         1

期望的输出:

*No.   per      hmm        qty*
1     BARBIE    new         1
3     AYLIK     new         1
4     BARB      mid         1

有没有一种方法可以指定保留哪一行以及删除哪一行?

感谢所有帮助。如果问题无法理解,请告诉我。提前致谢。

【问题讨论】:

    标签: r


    【解决方案1】:

    嗯,不确定这是否是您想要的。这将删除所有带有 NA 的行。

    df <- df[complete.cases(df), ]
    

    假设您在其他列中有 NA,并且您不希望将这些考虑在内。要仅查看单个列中的 NA,请使用以下命令:

    df <- df[complete.cases(df[,3]), ]
    

    其中 3 是您要在其中查找 NA 的列的编号。

    【讨论】:

      【解决方案2】:

      也许这对你有用

      df <- read.table(text="No.   per         hmm        qty*
      1    BARBIE123     new         1
      2    AYLIK32       N/A        1
      3    AYLIK32       new         1
      4     BARB         mid         1", header=TRUE, stringsAsFactors=FALSE)
      
      library(dplyr)
      df %>%
        filter(!duplicated(per, fromLast=TRUE))
      
        # No.       per hmm qty.
      # 1   1 BARBIE123 new    1
      # 2   3   AYLIK32 new    1
      # 3   4      BARB mid    1
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-07-02
        • 2016-07-22
        • 1970-01-01
        • 1970-01-01
        • 2022-07-18
        • 2013-06-22
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多