gpt4 book ai didi

r - 根据两列的变化创建增量变量

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

我的数据看起来像这样:

id <- c(1,1,1,1,1,1,1,1,2,2,2,2,2,2)
var1 <- c(1,2,2,3,4,4,4,4,1,1,2,2,2,3)
var2 <- c(1,2,2,2,2,3,4,4,1,1,1,2,2,2)

df <- data.frame(id,var1,var2)

看起来像这样:

id  var1  var2
1 1 1
1 2 2
1 2 2
1 3 2
1 4 2
1 4 3
1 4 4
1 4 4
2 1 1
2 1 1
2 2 1
2 2 2
2 2 2
2 3 2

我想创建一个新列,每次 var1 或 var2 中的更改都会加 1,并针对每个 id 进行重置。所以我想要的输出是:

id  var1  var2  var3
1 1 1 1
1 2 2 2
1 2 2 2
1 3 2 3
1 4 2 4
1 4 3 5
1 4 4 6
1 4 4 6
2 1 1 1
2 1 1 1
2 2 1 2
2 2 2 3
2 2 2 3
2 3 2 4

我尝试了在这里找到的多种东西,但没有任何东西完全符合我的要求。例如两者:

DT <- as.data.table(df, keep.rownames = T)
DT[, var3 := .GRP, by = list(id, var1, var2)][]

or

indx <- as.character(interaction(df[c("id", "var1", "var2")]))
df$var3<- cumsum(c(TRUE,indx[-1]!=indx[-length(indx)]))

不要为新主题重置。感谢您的帮助。

最佳答案

df %>% 
group_by(id) %>%
mutate(var3 = cumsum(c(0, diff(var1) | diff(var2)) != 0) + 1) %>%
ungroup

# A tibble: 14 x 4
id var1 var2 var3
<dbl> <dbl> <dbl> <dbl>
1 1 1 1 1
2 1 2 2 2
3 1 2 2 2
4 1 3 2 3
5 1 4 2 4
6 1 4 3 5
7 1 4 4 6
8 1 4 4 6
9 2 1 1 1
10 2 1 1 1
11 2 2 1 2
12 2 2 2 3
13 2 2 2 3
14 2 3 2 4

关于r - 根据两列的变化创建增量变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71678861/

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