【问题标题】:Removing Duplicate Rows Based on Three Columns基于三列删除重复行
【发布时间】:2022-01-24 19:16:34
【问题描述】:

在数据框中,您可以看到两列(Sample 和 SampleDate)是观察到重复项的位置;意思是,如果这两列中的行值相同,则它是重复行。对于每条重复记录,我试图只删除一个重复的行。但是,对此的扭曲是我想保留 WQStandard 列不为空白的行。数据框超过 6,000 行长,并且在 Parameter 列中有许多不同类型的名称。

structure(list(Parameter = c("1,1,1-Trichloroethane", "1,1,1-Trichloroethane", 
"1,1,1-Trichloroethane", "1,1,1-Trichloroethane", "1,1,1-Trichloroethane", 
"1,1,1-Trichloroethane", "1,1,1-Trichloroethane", "1,1,1-Trichloroethane", 
"1,1,1-Trichloroethane", "1,1,1-Trichloroethane", "1,1,1-Trichloroethane", 
"1,1,1-Trichloroethane", "1,1,1-Trichloroethane", "1,1,1-Trichloroethane", 
"1,1,1-Trichloroethane", "1,1,1-Trichloroethane", "1,1,1-Trichloroethane", 
"1,1,1-Trichloroethane", "1,1,1-Trichloroethane", "1,1,1-Trichloroethane", 
"1,1,1-Trichloroethane", "1,1,1-Trichloroethane", "1,1,1-Trichloroethane", 
"1,1,1-Trichloroethane", "1,1,1-Trichloroethane", "1,1,1-Trichloroethane", 
"1,1,1-Trichloroethane", "1,1,1-Trichloroethane", "1,1,1-Trichloroethane", 
"1,1,1-Trichloroethane", "1,1,1-Trichloroethane", "1,1,1-Trichloroethane", 
"1,1,1-Trichloroethane", "1,1,1-Trichloroethane", "1,1,1-Trichloroethane", 
"1,1,1-Trichloroethane", "1,1,1-Trichloroethane", "1,1,1-Trichloroethane", 
"1,1,1-Trichloroethane", "1,1,1-Trichloroethane", "1,1,1-Trichloroethane", 
"1,1,1-Trichloroethane", "1,1,1-Trichloroethane", "1,1,2,2-Tetrachloroethane", 
"1,1,2,2-Tetrachloroethane", "1,1,2,2-Tetrachloroethane", "1,1,2,2-Tetrachloroethane", 
"1,1,2,2-Tetrachloroethane", "1,1,2,2-Tetrachloroethane", "1,1,2,2-Tetrachloroethane"
), Unit = c("mg/L", "mg/L", "mg/L", "mg/L", "mg/L", "mg/L", "mg/L", 
"mg/L", "mg/L", "mg/L", "mg/L", "mg/L", "mg/L", "mg/L", "mg/L", 
"mg/L", "mg/L", "mg/L", "mg/L", "mg/L", "mg/L", "mg/L", "mg/L", 
"mg/L", "mg/L", "mg/L", "mg/L", "mg/L", "mg/L", "mg/L", "mg/L", 
"mg/L", "mg/L", "mg/L", "mg/L", "mg/L", "mg/L", "mg/L", "mg/L", 
"mg/L", "mg/L", "mg/L", "mg/L", "mg/L", "mg/L", "mg/L", "mg/L", 
"mg/L", "mg/L", "mg/L"), WaterQualityStandardId = c(NA, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, NA, NA, 1, NA, 1, NA, 1, NA), Parameter_Id = c(37, 
37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 
37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 
37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 144, 144, 144, 144, 144, 
144, 144), WaterQualityStandard = c(NA, NA, NA, NA, NA, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
NA, NA, NA, NA, NA, "ABTier1CommIndCoarse-2019", NA, "ABTier1CommIndCoarse-2019", 
NA, "ABTier1CommIndCoarse-2019", NA), Sample_Id = c(134762, 134763, 
134781, 134782, 134800, 134801, 134819, 134820, 134826, 134843, 
134844, 134862, 134863, 134878, 134879, 134932, 134933, 134984, 
134985, 135038, 135039, 135092, 135093, 135139, 135140, 135184, 
135185, 135230, 135231, 135277, 135278, 135323, 135324, 135369, 
135370, 135414, 135415, 135454, 135455, 135498, 135499, 135537, 
135538, 134762, 134762, 134763, 134763, 134781, 134781, 134782
), ExceedanceColor = c(NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
NA, NA, -886475, NA, -886475, NA, -886475, NA), Value = c(5e-04, 
5e-04, 5e-04, 5e-04, 5e-04, 5e-04, 5e-04, 5e-04, 5e-04, 5e-04, 
5e-04, 5e-04, 5e-04, 5e-04, 5e-04, 5e-04, 5e-04, 5e-04, 5e-04, 
5e-04, 5e-04, 5e-04, 5e-04, 5e-04, 5e-04, 5e-04, 5e-04, 5e-04, 
5e-04, 5e-04, 5e-04, 5e-04, 5e-04, 5e-04, 5e-04, 5e-04, 5e-04, 
5e-04, 5e-04, 5e-04, 5e-04, 5e-04, 5e-04, 5e-04, 5e-04, 5e-04, 
5e-04, 5e-04, 5e-04, 5e-04), StandardLowerLimit = c(NA, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, NA, 5e-04, 0, 5e-04, 0, 5e-04, 0, 
5e-04), QCFlag = c(NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
NA, NA, NA, NA, NA, NA, NA), StandardUpperLimit = c(NA, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, NA, 0.004, 0.004, 0.004, 0.004, 0.004, 
0.004, 0.004), Qualifier = c("<", "<", "<", "<", "<", "<", "<", 
"<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", 
"<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", 
"<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", "<", 
"<", "<", "<", "<"), EffectiveLowerLimit = c(NA, NA, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, 5e-04, 0, 5e-04, 0, 5e-04, 0, 5e-04
), Sample = c("BF11-10A43987", "BF11-10A44125", "BF11-10B43987", 
"BF11-10B44125", "BF11-11A43987", "BF11-11A44125", "BF11-11B43987", 
"BF11-11B44125", "BF11-11C43987", "BF11-1243992", "BF11-1244125", 
"BF11-13A43992", "BF11-13A44125", "BF11-13B43992", "BF11-13B44125", 
"BF92-0143992", "BF92-0144126", "BF92-0243992", "BF92-0244126", 
"BF92-0343992", "BF92-0344126", "BF92-0443992", "BF92-0444126", 
"BF97-01D43992", "BF97-01D44121", "BF97-01S43992", "BF97-01S44121", 
"BF97-02D43992", "BF97-02D44121", "BF97-02S43992", "BF97-02S44121", 
"BF97-03D43992", "BF97-03D44121", "BF97-03S43992", "BF97-03S44121", 
"BF97-04D43987", "BF97-04D44125", "BF97-04S43987", "BF97-04S44125", 
"BF97-05D43987", "BF97-05D44125", "BF97-05S43987", "BF97-05S44125", 
"BF11-10A43987", "BF11-10A43987", "BF11-10A44125", "BF11-10A44125", 
"BF11-10B43987", "BF11-10B43987", "BF11-10B44125"), EffectiveUpperLimit = c(NA, 
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 0.004, 0.004, 0.004, 
0.004, 0.004, 0.004, 0.004), SampleDate = structure(c(1591315200, 
1603152000, 1591315200, 1603152000, 1591315200, 1603152000, 1591315200, 
1603152000, 1591315200, 1591660800, 1603152000, 1591660800, 1603152000, 
1591660800, 1603152000, 1591660800, 1603238400, 1591660800, 1603238400, 
1591660800, 1603238400, 1591660800, 1603238400, 1591660800, 1602806400, 
1591660800, 1602806400, 1591660800, 1602806400, 1591660800, 1602806400, 
1591660800, 1602806400, 1591660800, 1602806400, 1591315200, 1603152000, 
1591315200, 1603152000, 1591315200, 1603152000, 1591315200, 1603152000, 
1591315200, 1591315200, 1603152000, 1603152000, 1591315200, 1591315200, 
1603152000), tzone = "UTC", class = c("POSIXct", "POSIXt")), 
    StandardUnit = c(NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
    NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
    NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
    NA, NA, NA, "mg/L", "mg/L", "mg/L", "mg/L", "mg/L", "mg/L", 
    "mg/L"), Station = c(22, 22, 23, 23, 24, 24, 25, 25, 26, 
    27, 27, 28, 28, 29, 29, 30, 30, 31, 31, 32, 32, 33, 33, 34, 
    34, 35, 35, 36, 36, 37, 37, 38, 38, 39, 39, 40, 40, 41, 41, 
    42, 42, 43, 43, 22, 22, 22, 22, 23, 23, 23), StandardActive = c(NA, 
    NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
    NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
    NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, TRUE, 
    NA, TRUE, NA, TRUE, NA), isExceedance = c(0, 0, 0, 0, 0, 
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
    0, 0, 0, 0, 0, 0, 0), QualifierValue = c("<0.0005", "<0.0005", 
    "<0.0005", "<0.0005", "<0.0005", "<0.0005", "<0.0005", "<0.0005", 
    "<0.0005", "<0.0005", "<0.0005", "<0.0005", "<0.0005", "<0.0005", 
    "<0.0005", "<0.0005", "<0.0005", "<0.0005", "<0.0005", "<0.0005", 
    "<0.0005", "<0.0005", "<0.0005", "<0.0005", "<0.0005", "<0.0005", 
    "<0.0005", "<0.0005", "<0.0005", "<0.0005", "<0.0005", "<0.0005", 
    "<0.0005", "<0.0005", "<0.0005", "<0.0005", "<0.0005", "<0.0005", 
    "<0.0005", "<0.0005", "<0.0005", "<0.0005", "<0.0005", "<0.0005", 
    "<0.0005", "<0.0005", "<0.0005", "<0.0005", "<0.0005", "<0.0005"
    )), class = c("tbl_df", "tbl", "data.frame"), row.names = c(NA, 
-50L))

【问题讨论】:

  • 请分享您的数据的代码,而不是图像。你可以使用dput()
  • 对不起,我是个新手。我不确定如何使用 dput() 但我很乐意这样做
  • 只需致电dput(Anndata)。将控制台的输出复制/粘贴到问题中

标签: r dplyr duplicates rows


【解决方案1】:

这有点棘手,我相信有一种更有效的方法可以做到这一点,但我认为这段代码可以满足您的需求。让我知道您的输出是否不合适。

library(tidyverse)
library(plyr)

# df <- "your data"

# make a variable (called x) that represents a unique combination of Sample and SampleDate 
# this is what defines the duplicate values
df2 <- df %>%
  mutate(x = paste0(Sample, as.numeric(SampleDate))) %>%
  mutate(x = as.factor(x))

df2 <- plyr::ddply(df2, "x", transform, y = seq(from = 0, by = 1, length.out = length(x)))

df2 <- df2 %>%
  mutate(z = if_else(y == 0, 0, 1))

# remove if both y and z are 1
df3 <- df2 %>% 
  dplyr::filter(!(y == 1 & z == 1))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-04-05
    • 2021-11-03
    • 2016-12-02
    • 1970-01-01
    • 2013-06-13
    • 1970-01-01
    相关资源
    最近更新 更多