处理R中具有相同Id(键)列值的多行

处理R中具有相同Id(键)列值的多行,r,dataframe,data.table,dplyr,R,Dataframe,Data.table,Dplyr,我在处理人口普查数据。数据集的外观如下所示: Household-Id Member-Type Education Birth 1 Father 12 1955 1 Mother 16 1963 1 Child 16 1986 1 Child

我在处理人口普查数据。数据集的外观如下所示:

Household-Id    Member-Type    Education    Birth
1               Father         12           1955
1               Mother         16           1963
1               Child          16           1986
1               Child          12           1995
2               Father         12           1950
2               Mother         9            1955
2               Child          18           1982
2               Child          14           1985
2               Child          16           1975
3               Father         16           1962
3               Mother         14           1965
3               Child          16           1990
我希望它看起来像是:

Household-Id    Member-Type    Education    Birth    Mother-Education    Birth-Order 
1               Father         12           1955     
1               Mother         16           1963
1               Child          16           1986     16                  1
1               Child          12           1995     16                  2
2               Father         12           1950
2               Mother         9            1955
2               Child          18           1982     9                   1
2               Child          14           1985     9                   2
2               Child          16           1975     9                   3
3               Father         16           1962
3               Mother         14           1965
3               Child          16           1990     14                  1

据我所知,R不支持像Java或C这样的语言中的循环操作,我真的不知道如何做到这一点

你从哪里听说R不支持循环??确实如此-这种特殊情况听起来最适合
data.table
(循环在内部使用)


以下是一种
dplyr
方法:

library(dplyr)

dat = dat %>% group_by(Household.Id, Member.Type) %>% 
  arrange(Birth) %>%
  mutate(Birth_Order = 1:n(),
         Birth_Order = ifelse(Member.Type=="Child", Birth_Order, NA_integer_)) %>%
  group_by(Household.Id) %>%
  mutate(Mother_Education = ifelse(Member.Type=="Child", 
                                   Education[Member.Type=="Mother"], NA))

   Household.Id Member.Type Education Birth Birth_Order Mother_Education
1             1       Child        16  1986           1               16
2             1       Child        12  1995           2               16
3             1      Father        12  1955          NA               NA
4             1      Mother        16  1963          NA               NA
5             2       Child        16  1975           1                9
6             2       Child        18  1982           2                9
7             2       Child        14  1985           3                9
8             2      Father        12  1950          NA               NA
9             2      Mother         9  1955          NA               NA
10            3       Child        16  1990           1               14
11            3      Father        16  1962          NA               NA
12            3      Mother        14  1965          NA               NA

我是个业余爱好者!谢谢。您最后一行的
:=
发生了什么事?:)
library(dplyr)

dat = dat %>% group_by(Household.Id, Member.Type) %>% 
  arrange(Birth) %>%
  mutate(Birth_Order = 1:n(),
         Birth_Order = ifelse(Member.Type=="Child", Birth_Order, NA_integer_)) %>%
  group_by(Household.Id) %>%
  mutate(Mother_Education = ifelse(Member.Type=="Child", 
                                   Education[Member.Type=="Mother"], NA))

   Household.Id Member.Type Education Birth Birth_Order Mother_Education
1             1       Child        16  1986           1               16
2             1       Child        12  1995           2               16
3             1      Father        12  1955          NA               NA
4             1      Mother        16  1963          NA               NA
5             2       Child        16  1975           1                9
6             2       Child        18  1982           2                9
7             2       Child        14  1985           3                9
8             2      Father        12  1950          NA               NA
9             2      Mother         9  1955          NA               NA
10            3       Child        16  1990           1               14
11            3      Father        16  1962          NA               NA
12            3      Mother        14  1965          NA               NA