r - 从重复表中创建 id 变量

标签 r data-manipulation

我有一个数据框,其中每一行都有一个唯一标识符,但有些行实际上是重复的。

fdf <- data.frame(name = c("fred", "ferd", "frad", 'eric', "eirc", "george"),
                  id = 1:6)
fdf
#>     name id
#> 1   fred  1
#> 2   ferd  2
#> 3   frad  3
#> 4   eric  4
#> 5   eirc  5
#> 6 george  6

我已经确定哪些行是重复的,并且此信息作为唯一 ID 对存储在第二个数据框中。所以 key 告诉我第 1 行与第 2 行和第 3 行等是同一个人。

key <- data.frame(id1 = c(1,1,2,4), id2 = c(2,3,3,5))
key
#>   id1 id2
#> 1   1   2
#> 2   1   3
#> 3   2   3
#> 4   4   5

我正在努力想出一种直接的方法来使用 key 在我的原始数据框中创建一个 id 变量。期望的输出是:

fdf$realid <- c(1,1,1,2,2,3)
fdf
#>     name id realid
#> 1   fred  1      1
#> 2   ferd  2      1
#> 3   frad  3      1
#> 4   eric  4      2
#> 5   eirc  5      2
#> 6 george  6      3

为清楚起见进行编辑

此处的键是 data.frame fdf 中行之间的一组真实连接。因此,您可以想象从所有可行连接的集合开始:

#  id1 id2
#   1   2
#   1   3
#   1   4
#   ...
#   6   4
#   6   5

确定哪些是真正的联系(基于每个观察中的其他变量)。

#  id1 id2 match
#   1   2   match
#   1   3  no match
#   1   4   match
#   ...
#   6   4   no match
#   6   5   no match

并子设置为匹配的案例。

最佳答案

最简单的方法是将 key 数据框重新创建为以下格式(即哪个 id 属于哪个 realid)

key <- data.frame(id     = c(1, 2, 3, 4, 5, 6), 
                  realid = c(1, 1, 1, 2, 2, 3))

然后就是将 fdfkey 合并在一起 merge

fdf <- merge(fdf, key_table, by.x = "id")
fdf
  id   name realid
1  1   fred      1
2  2   ferd      1
3  3   frad      1
4  4   eric      2
5  5   eirc      2
6  6 george      3

关于r - 从重复表中创建 id 变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49054257/

相关文章:

r - 在ggplot中一起显示相似的条

R如何将<U+9600><U+524D>之类的UTF-8代码转换回汉字

r - rmarkdown 自动给数字编号

r - 创建一个介于有序数据框中两行之间的列

r - 按列使用 cumsum

sas - 根据包含代码簿的单独数据集中的变量更改一个数据集中的 SAS 变量标签/属性 - PROC SQL?处理数据集?

mysql - 表 1 中的每个事件都有时间戳。查找表 2 中之前开始并之后完成的所有事务

用于从文本中剪切列的 Windows 命令

r - 如何根据 R 中最近位置的坐标对数据框中的行进行子集化

r - 如何计算 R 表格中的百分比差异