【发布时间】:2019-05-20 01:11:02
【问题描述】:
我有一个 data.frame (df),参见示例,其中包含有关人员的信息。根据一个关键列 (sleutel),我知道人们是否住在一起(例如组成一个家庭)。现在,我需要创建新列,其中包含有关家庭“负责人”的信息。
name sex gzverh sleutel gzhfd lft
1 Loekens Man 6 1847LS 9 3 49
2 Kemel Vrouw 5 1847LK 10 2 18
3 Kemel Man 5 1847LK 10 2 22
4 Boersma Vrouw 4 1847LK 10 2 52
5 Kemel Man 2 1847LK 10 1 54
例如:第 5 行,Kemel,Male 和 gzhfd 1(= Kemel 家族的负责人)。他嫁给了夫人。 Boersma(同一个键)。我想改变一个新列(lfthb),其中包含所有家庭成员的户主年龄。所以应该变成这样:
name sex gzverh sleutel gzhfd lft lfthb
1 Loekens Man 6 1847LS 9 3 49 NA
2 Kemel Vrouw 5 1847LK 10 2 18 54
3 Kemel Man 5 1847LK 10 2 22 54
4 Boersma Vrouw 4 1847LK 10 2 52 54
5 Kemel Man 2 1847LK 10 1 54 54
我使用group_by、case_when 和if_else 语句的多种组合对dplyr 进行了多种尝试。我设法改变了一家之主的专栏。但不适用于其他成员。
例如,显然只改变了头部本身的值:
df <- df %>% mutate(lfthb = case_when(sleutel == lag(sleutel) & gzhfd == 1 ~ lft))
但是如何在~ 之后包含gzhfd == 1?
示例数据的输入:
structure(list(naam = c("Loekens", "Kemel", "Kemel", "Boersma",
"Kemel"), gesl = c("Man", "Vrouw", "Man", "Vrouw", "Man"), gzverh = c(6L,
5L, 5L, 4L, 2L), sleutel = c("1847LS 9", "1847LK 10", "1847LK 10",
"1847LK 10", "1847LK 10"), gzhfd = c(3, 2, 2, 2, 1), lft = c(49,
18, 22, 52, 54)), row.names = c(NA, 5L), class = "data.frame")
【问题讨论】: