gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 15:27:44 26 4
gpt4 key购买 nike

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

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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com