変数の重複値を含むデータフレーム(〜5000行、6列)がありid
ます。別の連続変数x
があり、その値を複製ごとに合計したいと思いますid
。観測は時間に依存し、変数がyear
あります。各複製の時系列で最初の観測を保持し、この最初の観測に後続の複製を追加しmonth
たいと思います。id
私が持っているものに似たダミーデータを含めました:dat1
。また、希望する結果の構造を示すデータセットも含めましたoutcome
。
私は2つの戦略を試しましたが、どちらも私が望むものをまったく与えてくれません(以下を参照)。最初の戦略では、の正しい値が得られますがx
、年と月の列が失われます。最初の重複するすべてのid
値について、これらを保持する必要があります。x
2番目の戦略では、の値が正しく合計されません。
私の望ましい結果を得る方法についての提案は大歓迎です。
# dummy data set
set.seed(179)
dat1 <- data.frame(id = c(1234, 1321, 4321, 7423, 4321, 8503, 2961, 1234, 8564, 1234),
year = rep(c("2006", "2007"), each = 5),
month = rep(c("December", "January"), each = 5),
x = round(rnorm(10, 10, 3), 2))
# desired outcome
outcome <- data.frame(id = c(1234, 1321, 4321, 7423, 8503, 2961, 8564),
year = c(rep("2006", 4), rep("2007", 3)),
month = c(rep("December", 4), rep("January", 3)),
x = c(36.42, 11.55, 17.31, 5.97, 12.48, 10.22, 11.41))
# strategy 1:
library(plyr)
dat2 <- ddply(dat1, .(id), summarise, x = sum(x))
# strategy 2:
# partition into two data frames - one with unique cases, one with dupes
dat1_unique <- dat1[!duplicated(dat1$id), ]
dat1_dupes <- dat1[duplicated(dat1$id), ]
# merge these data frames while summing the x variable for duplicated ids
# with plyr
dat3 <- ddply(merge(dat1_unique, dat1_dupes, all.x = TRUE),
.(id), summarise, x = sum(x))
# in base R
dat4 <- aggregate(x ~ id, data = merge(dat1_unique, dat1_dupes,
all.x = TRUE), FUN = sum)