gpt4 book ai didi

根据条件替换组

转载 作者:行者123 更新时间:2023-12-04 10:59:04 24 4
gpt4 key购买 nike

我有一个 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_bycase_whenif_else 语句的多种组合尝试了多种使用 dplyr 的方法。我设法改变了一家之主的专栏。但不适合其他成员。

例如,显然只更改 head 本身的值:

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")

最佳答案

replaceifelse 的组合将完成这项工作,即

library(tidyverse)

df %>%
group_by(sleutel) %>%
mutate(lfthb = ifelse(any(gzhfd == 1), replace(lft, gzhfd != 1, lft[gzhfd == 1]), NA))

这给出了,

# A tibble: 5 x 7
# Groups: sleutel [2]
naam gesl gzverh sleutel gzhfd lft lfthb
<chr> <chr> <int> <chr> <dbl> <dbl> <dbl>
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

正如@Ronak 提到的,我们可以省略 replace 部分

df %>% 
group_by(sleutel) %>%
mutate(lfthb = if (any(gzhfd == 1)) lft[gzhfd == 1] else NA)

关于根据条件替换组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53852991/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com