[英]How to assign a value to a particular sequence in a column in r?
我有以下數據框:
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.table
或plyr
解決方案,我將不勝感激。 謝謝。
我不確定我是否理解你的問題,但這是一個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
使用dplyr
library(dplyr)
dm %>%
group_by(vehid) %>%
mutate(loop= c(".", "loop")[(max(frameid[!!s.frame]) <= frameid & frameid <= min(s.frame[!!s.frame]))+1])
# 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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.