假設我有以下資料:
df1<- data.frame(province= c(1,1,2,3,3,3,4,4,4,4,4,5,5,5),year= c(2001,2001,2001,2001,2001,2001,2002,2002,2003,2003,2003,2004,2005,2005),
residence= c(1,1,1,2,2,2,1,1,1,2,2,2,2,2),marriage= c(1,2,2,1,2,1,1,1,2,1,1,1,2,1),count=c(4,1,3,5,3,2,2,3,2,1,2,4,2,5))
在我的資料中marriage = 1是ever-married和marriage = 2是never-married。的比例ever-married可以通過列來估計count:ever-married / ever-married never-married
我想要的是估計ever-married基于列的比例province,year以及residence兩個條件:1-如果沒有基于三列的已婚,則比例將為0
2-如果沒有基于三列的未婚,則比例為100.
我的預期輸出是這樣的:
province year residence sub
1 2001 1 0.80
2 2001 1 0.00
3 2001 2 0.70
4 2002 1 100.00
4 2003 1 0.00
4 2003 2 100.00
5 2004 2 100.00
5 2005 2 0.71
先感謝您。
uj5u.com熱心網友回復:
我們按'province'、'year'、'residence'分組,根據if/else'marriage'值1、2不存在時創建條件,然后分別回傳0、100或else獲取'marriage'對應的'count'值' 值 1,除以sum'count' 然后sum是比例
library(dplyr)
df1 %>%
group_by(province, year, residence) %>%
summarise(sub = if(!any(marriage == 1)) 0
else if(!any(marriage == 2)) 100 else
sum(count[marriage == 1]/sum(count)), .groups = 'drop')
-輸出
# A tibble: 8 × 4
province year residence sub
<dbl> <dbl> <dbl> <dbl>
1 1 2001 1 0.8
2 2 2001 1 0
3 3 2001 2 0.7
4 4 2002 1 100
5 4 2003 1 0
6 4 2003 2 100
7 5 2004 2 100
8 5 2005 2 0.714
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/409158.html
標籤:
