gpt4 book ai didi

按组用第一个观察值替换所有值

转载 作者:行者123 更新时间:2023-12-03 22:56:38 28 4
gpt4 key购买 nike

对于由“id”定义的每个组,我想选择列“x”和“y”的第一行中的值,并将所有后续值替换为该第一个值。
一些数据:

id    Visit   x        y
1 1 0 1
1 2 1 2
1 3 2 8
2 9 1 11
2 10 12 14
我想要:
id    Visit   x        y
1 1 0 1
1 2 0 1 # <- x & y replaced with first values of 'id' 1
1 3 0 1 #
2 9 1 11
2 10 1 11 # <- x & y replaced with first values of 'id' 2
我试过这个:
df1 <- df %>%
arrange(id, Visit) %>%
group_by(id) %>%
fill(x, y,
.direction = 'down',)
然而,这似乎并没有做到。有人可以帮忙吗?

最佳答案

A base替代使用 duplicated :

df[, c("x", "y")] = df[(i = !duplicated(df$id)), c("x", "y")][cumsum(i), ]
# id Visit x y
# 1 1 1 0 1
# 2 1 2 0 1
# 3 1 3 0 1
# 4 2 9 1 11
# 5 2 10 1 11

使用 data.table滚动连接以“填充”每个组中的第一个值(在较大数据上快速):
library(data.table)
setDT(df)
df[ , c("x", "y") := df[!duplicated(id)][.SD, on = .(id, Visit), .(x, y), roll = Inf]]
df
# id Visit x y
# 1: 1 1 0 1
# 2: 1 2 0 1
# 3: 1 3 0 1
# 4: 2 9 1 11
# 5: 2 10 1 11

关于按组用第一个观察值替换所有值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66376333/

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