r - 如何在 R 中匹配彼此在 +/- 5 以内的观察值?

标签 r string-matching

假设我有一个如下所示的数据框:

dat <- data.frame("firstName" = c("John", "John", "Mary", "Bob", "Mary", "Bob"), "age"= c(21, 24, 35, 30, 20, 27))

我想创建第三个变量 dat$id,如果一个观察的年龄在另一个观察的 +/- 5 年以内并且具有相同的名字,则分配相同的数字。所以数据框看起来像这样:

dat <- data.frame("firstName" = c("John", "John", "Mary", "Bob", "Mary", "Bob"), "age"= c(21, 24, 35, 30, 20, 27), "id"= c(1,1,2,3,4,3))

我有一个非常大的姓名和年龄数据集,想找到一种更自动化的分配 ID 的方法。我考虑过从 20 岁开始每 5 年创建一个年龄分箱,但这与不同分箱中但仍在 5 岁以内的观察结果不匹配。

最佳答案

没有额外的包

dat <- data.frame("firstName" = c("John", "John", "Mary", "Bob", "Mary", "Bob"), "age"= c(21, 24, 35, 30, 20, 27))
n <- length(dat$firstName)

vals <- list()
for (i in 1:n) {
    fname <- dat$firstName[i]
    age <- dat$age[i]
    index <- which(fname == dat$firstName &
     (age > dat$age - 5) &
     (age < dat$age + 5))
    vals[[i]] <- index
}

vals <- unique(vals)
dat$id <- NA

for (i in 1:length(vals)) {
    dat$id[vals[[i]]] <- i
}

结果

  firstName age id
1      John  21  1
2      John  24  1
3      Mary  35  2
4       Bob  30  3
5      Mary  20  4
6       Bob  27  3

关于r - 如何在 R 中匹配彼此在 +/- 5 以内的观察值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61921752/

相关文章:

python - Apache Spark 中的高效字符串匹配

Java:有没有人有方法找到数组中字符串的最佳匹配?

python - 在 python 中计算列表中的字符串然后过滤和匹配

r - Java Script 警报 R 遇到 fatal error 。此 session 已终止

vb.net - 如何搜索字典键的一部分?

r - 在同一张图中绘制具有多个值的分布图

r - 使用 file.show 在 R studio 中打开 PDF

r - 通过名称模糊匹配创建唯一 ID(通过使用 R 的 agrep)

r - 如何使用 ggplot2 在 R 中为多个 y 系列制作线性拟合线?

r - 在嵌套列表中查找索引位置以进行匹配