我在R工作
样本数据:
我的一些人的 ID 是从他们的社会保障/国民保险号码 (actual_id) 中分配的。假定实际_id 是正确的。
这一栏可能不需要,但我已经算出了每个人在数据中出现的次数(数字)。例如我们可以看到actual_id = 1的人在数据中出现了两次,所以这个人的number = 2。
我创建了一种新的身份识别方法,与社会保障/国民保险号码无关。新方法生成了一个 id,位于 suggest_id 列中。
df <- data.frame(actual_id = c(1, 1, 2, 2, 2, 3, 3),
proposed_id = c("a", "a", "b", "b", "c", "d", "b"),
number = c(2, 2, 3, 3, 3, 2, 2))
print(df)
实际_id | 数字 | 提议的_id |
---|---|---|
1 | 2 | a |
1 | 2 | a |
2 | 3 | b |
2 | 3 | b |
2 | 3 | c |
3 | 2 | d |
3 | 2 | b |
期望的结果
我想要一种方法来评估提议的_id 是否仅对任何实际_id 使用一次:
我的实际数据有 90,000 行。
实际_id | 数字 | 提议的_id | 评估 |
---|---|---|---|
1 | 2 | a | 正确 |
1 | 2 | a | 正确 |
2 | 3 | b | 错误 |
2 | 3 | b | 错误 |
2 | 3 | c | 正确 |
3 | 2 | d | 正确 |
3 | 2 | b | 错误 |
with(df, ave(actual_id, proposed_id, FUN = function(z) length(unique(z)) == 1)) > 0
# [1] TRUE TRUE FALSE FALSE TRUE TRUE FALSE
library(dplyr)
df %>%
mutate(assessment = n_distinct(actual_id) == 1, .by = proposed_id)
# actual_id proposed_id number assessment
# 1 1 a 2 TRUE
# 2 1 a 2 TRUE
# 3 2 b 3 FALSE
# 4 2 b 3 FALSE
# 5 2 c 3 TRUE
# 6 3 d 2 TRUE
# 7 3 b 2 FALSE
library(data.table)
as.data.table(df)[, assessment := uniqueN(actual_id) == 1, by = "proposed_id"][]
# actual_id proposed_id number assessment
# <num> <char> <num> <lgcl>
# 1: 1 a 2 TRUE
# 2: 1 a 2 TRUE
# 3: 2 b 3 FALSE
# 4: 2 b 3 FALSE
# 5: 2 c 3 TRUE
# 6: 3 d 2 TRUE
# 7: 3 b 2 FALSE
样本数据
df <- structure(list(actual_id = c(1, 1, 2, 2, 2, 3, 3), proposed_id = c("a", "a", "b", "b", "c", "d", "b"), number = c(2, 2, 3, 3, 3, 2, 2)), class = "data.frame", row.names = c(NA, -7L))
你可以试试
transform(
df,
assessment = !ave(actual_id, proposed_id, FUN = \(x) diff(range(x)))
)
这给出了
actual_id proposed_id number assessment
1 1 a 2 TRUE
2 1 a 2 TRUE
3 2 b 3 FALSE
4 2 b 3 FALSE
5 2 c 3 TRUE
6 3 d 2 TRUE
7 3 b 2 FALSE