gpt4 book ai didi

r - 在 R 中循环查找上一个匹配项

转载 作者:搜寻专家 更新时间:2023-10-30 22:25:55 25 4
gpt4 key购买 nike

我需要一些帮助来在 R 中编写循环函数。当出现相同的 id 时,我无法选择上一个匹配项,然后编写 OLD_RANK 列和 NEW_RANK 列。

OLD_RANK 必须是找到的上一个匹配项的 NEW_RANK

`NEW_RANK`<- OLD_RANK+0.05(S1-S2)

这里是我这个例子的数据

JUNK<- matrix(c(1,1,10,20,3,2,30,40,1,3,60,4,3,
4,5,40,1,5,10,30,7,6,20,20),ncol=4,byrow=TRUE)
colnames(JUNK) <- c("ID1","DAY","S1","S2")
JUNK<- as.data.frame(JUNK)

我认为可能是一个好的开始:

#subset to find previous match. Find matches before days and if more matches are 
#found, choose the row with higher values in `days`
loop for each row
s1 <- subset(s1, DAYS < days)
s1 <- subset(s1, DAYS = max(days))

#if no match fuond JUNK$OLD_RANK<-35 and JUNK$NEW_RANK <-JUNK$OLD_RANK+0.05(S1-S2)
#if previous match is found JUNK$NEW_RANK <-JUNK$OLD_RANK+0.05(S1-S2)

预期结果:

ID1    DAYS    S1     S2     OLD_RANK   NEW_RANK
1 1 10 20 35 34.5
3 2 30 40 35 34.5
1 3 60 4 34.5 37.3
3 4 5 40 34.5 32.75
1 5 10 30 37.3 36.3
7 6 20 20 35 35

感谢任何帮助。

最佳答案

这是一种方法:

library(dplyr)
JUNK2 <- JUNK %>%
group_by(ID1) %>%
mutate(change = 0.05*(S1-S2),
NEW_RANK = 35 + cumsum(change),
OLD_RANK = lag(NEW_RANK) %>% if_else(is.na(.), 35, .)) %>%
ungroup() # EDIT: Added to end with ungrouped table

结果:

JUNK2
# A tibble: 6 x 7
ID1 DAY S1 S2 change NEW_RANK OLD_RANK
<dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1 1 1 10 20 -0.5 34.5 35
2 3 2 30 40 -0.5 34.5 35
3 1 3 60 4 2.8 37.3 34.5
4 3 4 5 40 -1.75 32.8 34.5
5 1 5 10 30 -1 36.3 37.3
6 7 6 20 20 0 35 35

关于r - 在 R 中循环查找上一个匹配项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52249272/

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