gpt4 book ai didi

r - 将数据子集到 R 中的第一次出现

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

我正在尝试对数据进行子集化,因此它只保留第一次出现的变量。我正在查看一个跟踪 worker 职业生涯的面板数据,我正在尝试对数据进行子集化,以便它只在每个人成为老板之前显示。

id  year    name    job    job2
1 1990 Bon Manager 0
1 1991 Bon Manager 0
1 1992 Bon Manager 0
1 1993 Bon Boss 1
1 1994 Bon Manager 0
2 1990 Jane Manager 0
2 1991 Jane Boss 1
2 1992 Jane Manager 0
2 1993 Jane Boss 1

所以我希望数据看起来像:
id  year    name    job   job2
1 1990 Bon Manager 0
1 1991 Bon Manager 0
1 1992 Bon Manager 0
1 1993 Bon Boss 1
2 1990 Jane Manager 0
2 1991 Jane Boss 1

这似乎是基本的审查,但为了我的分析,这是至关重要的..!任何帮助,将不胜感激。

最佳答案

这是一个 dplyr 解决方案,它使用了两个有用的 window functions lag()cumall() :

df <- read.table(header = TRUE, text = "
id year name job job2
1 1990 Bon Manager 0
1 1991 Bon Manager 0
1 1992 Bon Manager 0
1 1993 Bon Boss 1
1 1994 Bon Manager 0
2 1990 Jane Manager 0
2 1991 Jane Boss 1
2 1992 Jane Manager 0
2 1993 Jane Boss 1
", stringsAsFactors = FALSE)

library(dplyr)

# Use mutate to see the values of the new variables
df %>%
group_by(id) %>%
mutate(last_job = lag(job, default = ""), cumall(last_job != "Boss"))

# Use filter to see the results
df %>%
group_by(id) %>%
filter(cumall(lag(job, default = "") != "Boss"))

我们使用 lag()找出每个人在上一年从事的工作,然后使用 cumall()将所有行保持到“Boss”的第一个实例。如果数据尚未按年份排序,您可以使用 lag(job, order_by = year)确保 lag()使用年份的值而不是行顺序来确定哪一年是“去年”。

关于r - 将数据子集到 R 中的第一次出现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21619873/

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