从data.frames列表中删除data.frames中的特定重复观察

时间:2017-02-22 13:07:58

标签: r list dataframe duplicates

我有一个data.frames列表,如下所示:

@echo off
setlocal disableDelayedExpansion
pushd "C:\Documents and Settings\John\Desktop\New\Interest\f2"
for /f "tokens=1,3 delims=:*?\/<>|" %%A in (
  'findstr /n "^" "*.txt" ^| findstr "^[^:]*:26:.......................[^:*?\\/<>|]"'
) do (
  set "old=%%A"
  set "line=%%B"
  setlocal enableDelayedExpansion
  ECHO ren "!old!" "!line:~23,11! - !old!"
  endlocal
)
popd

我想要做的是:如果在“Val”列中,在“Replicate”列中有一个与R4相关的重复元素,它们都将从“Val”列中删除。

例如,在名为 $`42` Val Replicate Index 26.92 R2 42 26.92 R3 42 28.68 R1 42 28.68 R4 42 $`43` Val Replicate Index 28.92 R3 43 29.28 R2 43 30.11 R1 43 30.11 R4 43 $`44` Val Replicate Index 24.67 R3 44 24.70 R2 44 25.70 R1 44 25.70 R4 44 $`45` Val Replicate Index 30.57 R1 45 30.57 R4 45 32.39 R2 45 32.81 R3 45 的data.frame中,由于30.57(R1)等于30.57(R4),它们都将被删除,仅保留32.39(R2)和32.81(R3)。因此,data.frame 45的所需输出将为:

45

我试图使用:

 $`45`
    Val  Replicate Index
  32.39       R2    45
  32.81       R3    45      

但不幸的是,它删除了“Val”列中的所有重复元素,而不是与“Replicate”列中的R4进行比较。

1 个答案:

答案 0 :(得分:2)

如果这仅与&#34; R4&#34;值,然后

df[!((duplicated(df$Val) |  duplicated(df$Val, fromLast=TRUE)) &
   df$Val[df$Replicate == "R4"]), ]
对于某些data.frame df,

将保留非重复观测值以及所有非R4观测值。然后,将其放入lapply

mynonDupeList <- lapply(myList,
                    function(i) i[!((duplicated(df$Val) | duplicated(i$Val, fromLast=TRUE))
                                  & i$Val[i$Replicate == "R4"]), ]))

应该这样做。