处理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