我正在使用46216观察点,其中单位是家庭和人,每个家庭可能有任意数量的整合,如:
enter image description here 这对另外几乎18000个家庭来说。
我需要做的是获得每个家庭的教育年限,因为我想我需要一个计算每个家庭人数的变量。
我试图做的是:
num_peopl=by(df$person_number, df$home, max)
,对于每个家庭,我把最高人数与居住在那里的人数相比较,但是当我尝试用df来解决这个问题时,我得到了:
“参数意味着行数不同:46216,17931”
就像它只将一个人的数量放在一行,而将其他人留空。
我该怎么做?有功能吗?
答案 0 :(得分:0)
我认为聚合和加入可能是你想要的。 Aggregate做的与你做的一样,但是把它放到一个我至少比较熟悉的数据框架中。
然后我使用了dplyr left_join,加入了家庭号码:
library(tidyverse)
df<-data.frame(home_number = c(1,1,1,2,2,3),
person_number = c(1,2,3,1,2,1),
age = c(20,21,1,54,50,30),
sex = c("m","f","f","m","f","f"),
salary = c(1000,890,NA,900,500,1200),
years_education = c(12,10,0,8,7,14))
df2<-aggregate(df$person_number, by = list(df$home_number), max)
df_final<-df%>%
left_join(df2, by = c("home_number" = "Group.1"))
home_number person_number age sex salary years_education x
1 1 1 20 m 1000 12 3
2 1 2 21 f 890 10 3
3 1 3 1 f NA 0 3
4 2 1 54 m 900 8 2
5 2 2 50 f 500 7 2
6 3 1 30 f 1200 14 1