I am working in R

sample data:

我有一些人的ID是从他们的社会保险/国家保险号码(Actual_Id)分配的.假定Actual_id是正确的.

这一栏可能不需要,但我已经计算出每个人在数据(数字)中出现的次数.例如,我们可以看到Actual_id=1的人在数据中出现了两次,所以这个人的数字=2.

我创造了一种新的身份识别方法,它与社保/国民保险号码无关.新方法生成了一个id,该id位于proposed_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)

actual_id number proposed_id
1 2 a
1 2 a
2 3 b
2 3 b
2 3 c
3 2 d
3 2 b

Desired outcome

我想要一种方法来判断是否建议的_id对于任何实际_id只使用一次:

  • 我们可以看到proposed_id=a已经被分配给Actual_id=1,并且不会再次出现在proposed_id列中.因此,这将被分配为"真".
  • 我们可以看到proposed_id=b已被分配给Actual_id=2,但随后又被分配到proposed_id=3.这将被分配为"False".

我的实际数据有90,000行.

actual_id number proposed_id assessment
1 2 a TRUE
1 2 a TRUE
2 3 b FALSE
2 3 b FALSE
2 3 c TRUE
3 2 d TRUE
3 2 b FALSE

推荐答案

base R

with(df, ave(actual_id, proposed_id, FUN = function(z) length(unique(z)) == 1)) > 0
# [1]  TRUE  TRUE FALSE FALSE  TRUE  TRUE FALSE

dplyr

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

data.table

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

R相关问答推荐

IQR()和stats之间四分位距计算的差异::分位数()在R和' ggpubr '

编码变量a、b、c以匹配来自另一个数据点的变量x

基于不同组的列的相关性

格点中指数、双曲和反双曲模型曲线的正确绘制

根据模式将一列拆分为多列,并在R中进行拆分

如何使下一个按钮只出现在Rshiny 的一段时间后?""

R根据条件进行累积更改

提取第一个下划线和最后一个下划线之间的任何内容,例外情况除外

如何通过匹配R中所有可能的组合来从宽到长旋转多个列?

悬崖三角洲超大型群数计算导致整数溢出

我如何使用tidyselect来传递一个符号数组,比如Pivot_Long?

如何根据未知数的多列排除重复行

自定义交互作用图的标签

数据集上的R循环和存储模型系数

是否从列中删除★符号?

roxygen2正在处理太多的文件

在GT()中的列之间添加空格

如何捕获这个shiny 的、可扩展的react 性用户输入矩阵作为另一个react 性对象,以便进一步操作?

将y轴格式更改为R中的百分比

真实世界坐标的逆st_变换