【发布时间】:2018-08-09 18:58:39
【问题描述】:
我有一个数据框,其中每一行都有一个唯一标识符,但有些行实际上是重复的。
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 对存储在第二个数据帧中。所以关键告诉我第 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
我正在努力想出一种简单的方法来使用密钥在我的原始数据框中创建一个 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
以及对匹配的案例进行子设置。
【问题讨论】:
-
数据中的名字真的一样吗?
-
不,这只是一个玩具示例。真实数据有更多变量,包括有拼写错误的长字符串。
-
您能更详细地解释一下您的密钥对吗?例如。 1等于2、1等于3、2等于3怎么加起来?
-
键对是
fdfdata.frame 中行之间的连接。由于fdf的前三个观察值(id = 1 到 3)是重复的,因此键表示 1 与 2 相关联,1 与 3 相关联,当然 2 与 3 相关联。2 必须等于 3如果 1 等于 2 和 3,因为“等于”是可传递的
标签: r data-manipulation