我有一个数据框,其中包含在不同公司工作的人员的大量重复个人ID。
我希望将 重复的 用于每个不同公司的每个不同季度的个人ID。
基本上,我希望R只针对公司1的第1季度内的ids运行 重复 ,然后针对公司1的第2季度,然后针对公司的第3季度1等等,直到公司1的代码完成,然后继续前进到公司2,在公司2再次运行第2季的公司2等等。
我的主要问题是:如果A人出现在多个不同的季度或多个公司,那么他/她的ID第一次出现在每个季度/公司 应该 NOT 被视为重复值。
任何意见都会得到极大的赞赏,我会确保迅速做出任何可能需要的澄清。谢谢。
答案 0 :(得分:0)
使用便于分组的任何软件包都可以轻松完成,例如" data.table"或" dplyr"。
示例:
library(data.table)
as.data.table(mydf)[, duplicates := duplicated(id), .(firm)][]
# firm quarter id duplicates
# 1: 1 1 A FALSE
# 2: 1 2 B FALSE
# 3: 1 3 A TRUE
# 4: 1 4 C FALSE
# 5: 1 5 B TRUE
# 6: 2 1 A FALSE
# 7: 2 1 B FALSE
# 8: 2 2 B TRUE
# 9: 3 1 D FALSE
# 10: 3 2 E FALSE
# 11: 3 2 F FALSE
# 12: 3 3 E TRUE
# 13: 4 1 A FALSE
# 14: 4 1 C FALSE
或
library(tidyverse)
mydf %>%
group_by(firm) %>%
mutate(duplicates = duplicated(id))
# # A tibble: 14 x 4
# # Groups: firm [4]
# firm quarter id duplicates
# <dbl> <dbl> <chr> <lgl>
# 1 1.00 1.00 A F
# 2 1.00 2.00 B F
# 3 1.00 3.00 A T
# 4 1.00 4.00 C F
# 5 1.00 5.00 B T
# 6 2.00 1.00 A F
# 7 2.00 1.00 B F
# 8 2.00 2.00 B T
# 9 3.00 1.00 D F
# 10 3.00 2.00 E F
# 11 3.00 2.00 F F
# 12 3.00 3.00 E T
# 13 4.00 1.00 A F
# 14 4.00 1.00 C F
或者,在基础R:
within(mydf, {
duplicates = ave(id, firm, FUN = duplicated)
})
示例数据:
mydf <- structure(list(firm = c(1, 1, 1, 1, 1, 2, 2, 2, 3, 3, 3, 3, 4,
4), quarter = c(1, 2, 3, 4, 5, 1, 1, 2, 1, 2, 2, 3, 1, 1), id = c("A",
"B", "A", "C", "B", "A", "B", "B", "D", "E", "F", "E", "A", "C"
)), .Names = c("firm", "quarter", "id"), row.names = c(NA, 14L
), class = "data.frame")