2

別の変数の値に基づいて削除したい重複した日付があります。対応する重複日付の dmean 値の 1 つが NA の場合、それを削除します。特定の日付の両方の dmean 値が NA の場合、いずれかの日付を保持したいと思います。サンプル データは以下にあります。

subset(df1, !duplicated(date)) 

しかし、これにより、dmean の値に関係なく、すべての重複が削除されました。たとえば、日付 2010-12-23 の場合、NA の値ではなく、dmean 値 28.38250 を保持したいと思います。

structure(list(date = c("2010-12-22", "2010-12-22", "2010-12-23", 
"2010-12-23", "2010-12-24", "2010-12-24", "2010-12-25", "2010-12-25", 
"2010-12-26", "2010-12-26", "2010-12-27", "2010-12-27", "2010-12-28", 
"2010-12-28"), dmean = c(NA, NA, NA, 28.3825, 35.54625, NA, 75.27625, 
NA, NA, 75.225, NA, 41.75, NA, 37.98375)), .Names = c("date", 
"dmean"), class = "data.frame", row.names = c(NA, -14L))
4

2 に答える 2

1

最初にデータフレームを注文すると機能しdateますdmean

df1_sorted <- df1[order(df1$date, df1$dmean), ]

並べ替え後、NAの はdmeans、対応する各 の数値を下回っていますdate

これで、日付が重複している行を除外できます。

subset(df1_sorted, !duplicated(date))

結果:

         date    dmean
1  2010-12-22       NA
4  2010-12-23 28.38250
5  2010-12-24 35.54625
7  2010-12-25 75.27625
10 2010-12-26 75.22500
12 2010-12-27 41.75000
14 2010-12-28 37.98375
于 2013-10-11T08:41:20.633 に答える
1

これが解決策plyrです:

ddply(df, .(date), summarize,
      dmean=ifelse(all(is.na(dmean)), NA, max(dmean,na.rm=TRUE)))

与える:

        date    dmean
1 2010-12-22       NA
2 2010-12-23 28.38250
3 2010-12-24 35.54625
4 2010-12-25 75.27625
5 2010-12-26 75.22500
6 2010-12-27 41.75000
7 2010-12-28 37.98375

値の平均値、最小値、またはその他の統計が必要な場合は、関数呼び出しを変更するのは非常に簡単であることに注意してくださいdmean

で同じことを行うこともできますdata.table:

dt <- data.table(df)
dt[,list(dmean=ifelse(all(is.na(dmean)), NA_real_, max(dmean,na.rm=TRUE))),by=date]
于 2013-10-11T08:46:01.007 に答える