gpt4 book ai didi

r - 查找组内的原始时间点

转载 作者:行者123 更新时间:2023-12-01 11:29:28 25 4
gpt4 key购买 nike

对于在不同时间点测量的序列,我感兴趣的是每个序列起源的时间点,如果有跳过则重置起源时间点。

dd <- data.frame(seq = letters[c(1:6,1,6:7,1:3,7:8,1)],
grp = rep(1:5, c(3,4,5,2,1)))
o2 <- c(1,1,1,2,2,2,1,2,3,1,3,3,3,4,5)

par(mar = c(5, 5, 2, 5), las = 1, bty = 'n', xpd = NA)
plot(as.numeric(dd$seq), dd$grp, col = o2, pch = 16,
cex = 3, xaxt = 'n', yaxt = 'n', xlab = 'seq', ylab = '')
axis(1, at = 1:8, letters[1:8], lwd = 0)
axis(2, at = 1:5, paste0('time ', 1:5))
axis(4, at = 1:5, palette()[1:5])

也许这会更好地说明:对于连续出现的每个序列,我想将该组分配给最低时间点并相应地为其着色。

enter image description here

因此第一组 a 从时间 1 开始,一直持续到时间 3,所以理论上这是与时间 1 相同的序列。由于还有另一组 a,因此假设这与另一组无关组 a 并为时间点 5 着色。

b 和 c 有两个起源,所以它们根据时间点单独着色。

我想要的结果是这个向量,o2

# split(cbind(dd, desired = o2), dd$grp)
cbind(dd, desired = o2)

# seq grp desired
# 1 a 1 1
# 2 b 1 1
# 3 c 1 1
# 4 d 2 2
# 5 e 2 2
# 6 f 2 2
# 7 a 2 1
# 8 f 3 2
# 9 g 3 3
# 10 a 3 1
# 11 b 3 3
# 12 c 3 3
# 13 g 4 3
# 14 h 4 4
# 15 a 5 5

最佳答案

这里有可能使用 dplyr

pd <- dd %>% arrange(seq,grp) %>% 
group_by(seq) %>%
mutate(set=cumsum(grp-lag(grp, default=100)!=1)) %>%
group_by(seq,set) %>%
mutate(colgrp=min(grp))

你用什么绘图

par(mar = c(5, 5, 2, 5), las = 1, bty = 'n', xpd = NA)
plot(as.numeric(pd$seq), pd$grp, col = pd$colgrp, pch = 16,
cex = 3, xaxt = 'n', yaxt = 'n', xlab = 'seq', ylab = '')
axis(1, at = 1:8, letters[1:8], lwd = 0)
axis(2, at = 1:5, paste0('time ', 1:5))
axis(4, at = 1:5, palette()[1:5])

注意奇怪的 default=100 值。理想情况下,我想使用 -1 或范围之外的东西,但感谢 this bug您不能输入负数。

关于r - 查找组内的原始时间点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34144689/

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