【问题标题】:Removing duplicates only for certain rows仅删除某些行的重复项
【发布时间】:2017-10-23 15:22:56
【问题描述】:

我有一个如下所示的数据框:

*VarName1* - *VarValue1*
*VarName2* - *VarValue2*
*Etc.*

实际上它看起来像这样:

nmlVar     - noFloat

Date-Batch - 2011020147
Weight     - 10
Length     - 5 
Height     - 8
Date-Batch - 2011020148
Weight     - 10.3
Length     - 6 
Height     - 8
Date-Batch - 2011020147
Weight     - 10
Length     - 5 
Height     - 8

我正准备以可以将其用于分析的方式组织数据。我已经在这篇文章中找到了如何将行转换为列:Transposing rows into columns, then split them

我用这段代码转置:

library(dplyr)
library(tidyr)
DFP %>% 
  mutate(sample = cumsum(nmlVar == 'Batch')) %>% 
  spread(nmlVar, noFloat)

我也想做同样的事情,但是在上面的函数中使用“Date-Batch”变量作为关键变量。这是必需的,因为这是另一个数据框中使用的键,我想合并它们。

问题是这个 Date-Batch 变量并不总是具有唯一值(检查第一次和第三次出现)。我正在尝试找到一个删除相同日期批处理值的每一秒出现的函数。

我试图用“编程语言”来描述它:

FOR Date-Batch IN nmlVar IF duplicate DELETE 第二次出现

我不知道这是否是最好的方法,或者你可以用另一种方式设置我。

【问题讨论】:

  • 第二批重复日期无论内容如何都应该删除?
  • @Moody_Mudskipper 是的,我有足够的数据行来忽略一些重复的分析

标签: r


【解决方案1】:

取决于你在这里所说的重复:

library(dplyr)
library(tidyr)
DFP %>% 
  mutate(sample = cumsum(nmlVar == 'Date-Batch')) %>% 
  spread(nmlVar, noFloat) %>%
  select(-sample) %>%
  filter(!duplicated(.))

DFP %>% 
  mutate(sample = cumsum(nmlVar == 'Date-Batch')) %>% 
  spread(nmlVar, noFloat) %>%
  select(-sample) %>%
  filter(!duplicated(`Date-Batch`))

在这种情况下两者的输出:

#   Date-Batch Height Length Weight
# 1 2011020147      8      5   10.0
# 2 2011020148      8      6   10.3

数据

DFP <- read.table(text="nmlVar      noFloat
Date-Batch  2011020147
Weight      10
Length      5 
Height      8
Date-Batch  2011020148
Weight      10.3
Length      6 
Height      8
Date-Batch  2011020147
Weight      10
Length      5 
Height      8",header=T)

【讨论】:

  • 感谢您的努力。它仍然重现与以前相同的错误:“行 x,y,z 的重复标识符”这可能与它首先尝试转置行然后查找重复行而不是相反的事实有关?
  • 我没有遇到错误,但您的问题中有错字,Date-Batch 在您的代码中拼写为Batch。会是问题吗?
  • 如果不是,请使用dput 向我们提供真实的可重复数据,以便我们确定我们正在做同样的事情。
猜你喜欢
  • 2011-10-10
  • 1970-01-01
  • 1970-01-01
  • 2015-06-23
  • 2023-02-25
  • 2015-04-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多