![](/img/trans.png)
[英]R,dplyr: How to replace 0 values based conditional on size of group_by
[英]Group_by, conditional sum and replace the variables in R
我想將這兩行從 STATA 轉換為 R 代碼:
bysort sj hid: generate H = sum( d ) if f == 1 & ( d == 1 | d == 2 )
bysort sj hid: replace H = H[ _N ] if f == 1 & ( d == 1 | d == 2 )
據我了解,結果應如下所示:
sj | 隱藏 | F | d | H |
---|---|---|---|---|
2000 | 27 | 0 | 1 | 0 |
2000 | 60 | 1 | 1 | 1 |
2000 | 302 | 1 | 1 | 3 |
2000 | 302 | 1 | 2 | 3 |
2000 | 302 | 1 | 3 | 0 |
我用了
H = ifelse(f==1 & (d==1 | d==2), ave(d,sj,hid, FUN = sum),0),
但是,我得到了這個結果:
sj | 隱藏 | F | d | H |
---|---|---|---|---|
2000 | 27 | 0 | 1 | 0 |
2000 | 60 | 1 | 1 | 1 |
2000 | 302 | 1 | 1 | 6 |
2000 | 302 | 1 | 2 | 6 |
2000 | 302 | 1 | 3 | 0 |
我想知道如何更改 R 中的代碼以在 hid 302 中獲得 H=3 而不是 6。另外,我想知道我應該如何編寫 R 代碼來獲得第二步,這給了我以下結果:
sj | 隱藏 | F | d | H |
---|---|---|---|---|
2000 | 27 | 0 | 1 | 0 |
2000 | 60 | 1 | 1 | 1 |
2000 | 302 | 1 | 1 | 3 |
2000 | 302 | 1 | 2 | 3 |
2000 | 302 | 1 | 3 | 0 |
有沒有類似於這樣的代碼的東西? 這個不行:
test_H %>%
group_by(sj, hid) %>%
if (f==1 & (d==1 | d==2)){
H = replace(test_H,H,[_N])
}
提前致謝。
感謝以上所有答案。 我只是發現這很有幫助。
它給了我現在想要的結果。
H=ifelse(f==1 & (d==1|d==2),ave(d*(d==1|d==2),sj,hid,FUN = sum),0)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.