[英]Add Elements of Data Frame to Another Data Frame Based on Condition R
我有兩個數據框,分別展示了一個月和下個月的分析結果。
這是數據的較小版本:
Jan19=data.frame(Group=c(589,630,523,581,689),Count=c(191,84,77,73,57))
Dec18=data.frame(Group=c(589,630,523,478,602),Count=c(100,90,50,6,0))
Jan19
Group Count
1 589 191
2 630 84
3 523 77
4 581 73
5 689 57
Dec18
Group Count
1 589 100
2 630 90
3 523 50
4 478 6
5 602 0
Jan19 只有計數 >0。 Dec18 是包含上個月結果的數據集。 Dec18 的每組計數 >=0。 我一直在為 counts =0 引用完整的 Dec18 數據集,並手動將它們輸入到完整的 Jan18 數據集中。 我想擺脫本練習的手動部分,只需能夠將 counts = 0 的組附加到 Jan19 數據集的末尾。
這導致我使用以下代碼來執行我上面描述的內容:
GData=rbind(Jan19,Dec18)
GData=GData[!duplicated(GData$Group),]
雖然此代碼導致了更正尺寸,但它不會選擇要刪除的正確副本。 在附加的數據集中,它將 Jan19 結果>0 視為重復項並將其刪除。 這是結果:
Gdata
Group Count
1 589 191
2 630 84
3 523 77
4 581 73
5 689 57
9 478 6
10 602 0
本質上,我希望 6 顯示為 0。因此,如果新的附加數據(12 月 18 日)與較新的數據(1 月 19 日)有重復的組,我將轉到以下代碼行,我想在其中設置條件),那么對應的 Count 應該=0。 否則,來自 Jan19 數據集的 count 值應該保持不變。
Gdata=ifelse(Dec18$Group %in% Jan19$Group==FALSE, Gdata$Count==0,Jan19$Count)
這會導致錯誤,我不確定如何修改它以達到我想要的結果。 任何幫助,將不勝感激!
您的rbind
/重復數據刪除方法是一個很好的方法,您只需要rbind
的Dec18
數據即可將Count
列設為 0:
Gdata = rbind(Jan19, transform(Dec18, Count = 0))
Gdata[!duplicated(Gdata$Group), ]
# Group Count
# 1 589 191
# 2 630 84
# 3 523 77
# 4 581 73
# 5 689 57
# 9 478 0
# 10 602 0
雖然此代碼導致了更正尺寸,但它不會選擇要刪除的正確副本。 在附加的數據集中,它將
Jan19
結果>0 視為重復項並將其刪除。 這是結果:
這是不正確的。 !duplicated()
將保留第一次出現並刪除以后出現的。 沒有刪除Jan19
數據---我們可以看到Gdata
的前 5 行正好是Jan19
的 5 行。 唯一的問題是來自Dec18
的非重復行並非都是 0 計數。 我們用transform()
解決了這個問題。
還有很多其他的方法可以做到這一點,有一個連接使用merge
功能,我們只能rbind
的非重復組為DB表明, rbind(Jan19, transform(Dec18, Count = 0)[!Dec18$Group %in% Jan19$Group,])
,還有其他的。 我們可以讓你的ifelse
方法像這樣工作:
Gdata = rbind(Jan19, Dec18)
Gdata$Count = ifelse(!Dec18$Group %in% Jan19$Group, 0, Gdata$Count)
# an alternative to ifelse, a little cleaner
Gdata = rbind(Jan19, Dec18)
Gdata$Count[!Gdata$Group %in% Jan19$Group] = 0
使用對您最有意義的任何內容。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.