gpt4 book ai didi

r - 将一行与所有其他行进行比较

转载 作者:行者123 更新时间:2023-12-02 07:21:13 24 4
gpt4 key购买 nike

我在 R 中有以下数据框

  ID     bay    row    tier
1 1 2 80
2 3 2 80
3 2 5 06
4 4 5 06
5 23 6 82
6 25 6 82
7 24 6 82
8 4 12 08

我想找到的是 rowtier 值相等,同时 bay 应该是 odd 两个相同的 row and tier 条目之间的编号和间隔差异应为 2

例如

 ID     bay    row    tier
1 1 2 80
2 3 2 80

以上两行符合我的条件 row and tier are same with bay as odd number and difference between two bay numbers is 2 并且我需要生成一个标志,该标志将为两行生成,假设 1,2,3 唯一标识对

我想要的数据框是

 ID     bay    row    tier   flag
1 1 2 80 1
2 3 2 80 1
3 2 5 06 NA
4 4 5 06 NA
5 23 6 82 2
6 25 6 82 2
7 24 6 82 NA
8 4 12 08 NA

我怎样才能在 r 中做到这一点?

最佳答案

可以这样得到子集,

ind <- duplicated(df[c('row', 'tier')]) & df$bay%%2 == 1|
duplicated(df[c('row', 'tier')], fromLast = TRUE) & df$bay%%2 == 1
df1 <- df[ind,]
df1 <- df1[!!with(df1, ave(bay, new, FUN = function(i) c(TRUE, diff(i) == 2))),]
df1

哪个给

  ID bay row tier
1 1 1 2 80
2 2 3 2 80
5 5 23 6 82
6 6 25 6 82

为了获得旗帜,

df$flag <- cumsum(c(1, diff(which(ind)) != 1))[match(df$ID, df1$ID)]
df

这给了,

ID bay row tier flag
1 1 1 2 80 1
2 2 3 2 80 1
3 3 2 5 6 NA
4 4 4 5 6 NA
5 5 23 6 82 2
6 6 25 6 82 2
7 7 24 6 82 NA
8 8 4 12 8 NA

关于r - 将一行与所有其他行进行比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45613170/

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