gpt4 book ai didi

r - 如何为 r 中的列中的特定序列赋值?

转载 作者:行者123 更新时间:2023-12-04 12:12:22 25 4
gpt4 key购买 nike

数据

我有以下数据框:

dm <- data.frame(vehid = rep(c(2,3), each=10),
frameid=rep(c(7,10,11,13,6,5,14,13,12,1),2),
frame.diff = rep(c(NA,3,1,2,7,1,9,1,1,11), 2),
s.frame = rep(c(rep(0,9), 12), 2))

问题

对于 s.frame!=0 我想检测所有在 frameid 序列中的 frameid s.frame 并为它们分配一个值 loop. 给其他人。

期望的输出

> dom
vehid frameid frame.diff s.frame loop
1 2 7 NA 0 loop
2 2 10 3 0 loop
3 2 11 1 0 loop
4 2 13 2 0 .
5 2 6 7 0 loop
6 2 5 1 0 loop
7 2 14 9 0 .
8 2 13 1 0 .
9 2 12 1 0 loop
10 2 1 11 12 loop
11 3 7 NA 0 loop
12 3 10 3 0 loop
13 3 11 1 0 loop
14 3 13 2 0 .
15 3 6 7 0 loop
16 3 5 1 0 loop
17 3 14 9 0 .
18 3 13 1 0 .
19 3 12 1 0 loop
20 3 1 11 12 loop

在上面的示例中,对于两个 vehid,序列都是 1 到 12 (frameid:s.frame)。输出显示序列的单词“loop”和“.”。对于所有其他人。
应该有一个简单的解决方案,但我无法弄清楚。如果有人提供 data.tableplyr 解决方案,我将不胜感激。谢谢。

最佳答案

我不确定我是否正确理解了你的问题,但这里有一个 data.table 选项

library(data.table)
setDT(dm)[, loop := ifelse(frameid %between% c(frameid[s.frame != 0], s.frame[s.frame != 0]), "loop", "."), by = vehid]
dm

# vehid frameid frame.diff s.frame loop
# 1: 2 7 NA 0 loop
# 2: 2 10 3 0 loop
# 3: 2 11 1 0 loop
# 4: 2 13 2 0 .
# 5: 2 6 7 0 loop
# 6: 2 5 1 0 loop
# 7: 2 14 9 0 .
# 8: 2 13 1 0 .
# 9: 2 12 1 0 loop
# 10: 2 1 11 12 loop
# 11: 3 7 NA 0 loop
# 12: 3 10 3 0 loop
# 13: 3 11 1 0 loop
# 14: 3 13 2 0 .
# 15: 3 6 7 0 loop
# 16: 3 5 1 0 loop
# 17: 3 14 9 0 .
# 18: 3 13 1 0 .
# 19: 3 12 1 0 loop
# 20: 3 1 11 12 loop

关于r - 如何为 r 中的列中的特定序列赋值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25250869/

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