dplyr-在同一列中连续出现,标签取决于出现的次数
我想使用R的dplyr-在同一列中连续出现,标签取决于出现的次数,r,dplyr,data.table,R,Dplyr,Data.table,我想使用R的dplyr和data.table来计算同一列(Temperature)中连续出现的次数,并将连续出现的次数3标记为“Discard” 扩展OP解决方案以同时使用dplyr和数据。表选项如下: library(dplyr) library(data.table) df %>% group_by(Store,RTU) %>% mutate(Flag = rleid(Temperature)) %>% group_by(Flag) %>% mutate(F
dplyr
和data.table
来计算同一列(Temperature
)中连续出现的次数,并将连续出现的次数3标记为“Discard” 扩展OP解决方案以同时使用dplyr
和数据。表
选项如下:
library(dplyr)
library(data.table)
df %>% group_by(Store,RTU) %>% mutate(Flag = rleid(Temperature)) %>%
group_by(Flag) %>%
mutate(Flag_Temperature_check = ifelse(row_number() <= 3, "Ok","Discard"))
# # A tibble: 18 x 6
# # Groups: Flag [6]
# Time Store RTU Temperature Flag Flag_Temperature_check
# <int> <int> <int> <int> <int> <chr>
# 1 1 1000 1 54 1 Ok
# 2 2 1000 1 54 1 Ok
# 3 3 1000 1 54 1 Ok
# 4 4 1000 1 54 1 Discard
# 5 5 1000 1 54 1 Discard
# 6 6 1000 1 56 2 Ok
# 7 7 1000 1 57 3 Ok
# 8 8 1000 1 50 4 Ok
# 9 9 1000 1 50 4 Ok
# 10 10 1000 1 50 4 Ok
# 11 11 1000 1 50 4 Discard
# 12 12 1000 1 50 4 Discard
# 13 13 1000 1 61 5 Ok
# 14 14 1000 1 61 5 Ok
# 15 15 1000 1 61 5 Ok
# 16 16 1000 1 61 5 Discard
# 17 17 1000 1 61 5 Discard
# 18 18 1000 1 58 6 Ok
库(dplyr)
库(数据表)
df%%>%分组依据(存储,RTU)%%>%变异(标志=rleid(温度))%%>%
分组依据(标志)%>%
mutate(Flag_Temperature_check=ifelse(row_number()扩展OP的解决方案以同时使用dplyr
和数据。表
中的一个选项可以是:
library(dplyr)
library(data.table)
df %>% group_by(Store,RTU) %>% mutate(Flag = rleid(Temperature)) %>%
group_by(Flag) %>%
mutate(Flag_Temperature_check = ifelse(row_number() <= 3, "Ok","Discard"))
# # A tibble: 18 x 6
# # Groups: Flag [6]
# Time Store RTU Temperature Flag Flag_Temperature_check
# <int> <int> <int> <int> <int> <chr>
# 1 1 1000 1 54 1 Ok
# 2 2 1000 1 54 1 Ok
# 3 3 1000 1 54 1 Ok
# 4 4 1000 1 54 1 Discard
# 5 5 1000 1 54 1 Discard
# 6 6 1000 1 56 2 Ok
# 7 7 1000 1 57 3 Ok
# 8 8 1000 1 50 4 Ok
# 9 9 1000 1 50 4 Ok
# 10 10 1000 1 50 4 Ok
# 11 11 1000 1 50 4 Discard
# 12 12 1000 1 50 4 Discard
# 13 13 1000 1 61 5 Ok
# 14 14 1000 1 61 5 Ok
# 15 15 1000 1 61 5 Ok
# 16 16 1000 1 61 5 Discard
# 17 17 1000 1 61 5 Discard
# 18 18 1000 1 58 6 Ok
库(dplyr)
库(数据表)
df%%>%分组依据(存储,RTU)%%>%变异(标志=rleid(温度))%%>%
分组依据(标志)%>%
突变(标记温度检查=ifelse(行编号()使用数据。表:
library(data.table)
setDT(df)
df[,
Comment := ifelse(seq_len(.N) <= 3, 'OK', 'Discard'),
.(Store, RTU, rleid(Temperature))
][]
# Time Store RTU Temperature Comment
# 1: 1 1000 1 54 OK
# 2: 2 1000 1 54 OK
# 3: 3 1000 1 54 OK
# 4: 4 1000 1 54 Discard
# 5: 5 1000 1 54 Discard
# 6: 6 1000 1 56 OK
# 7: 7 1000 1 57 OK
# 8: 8 1000 1 50 OK
# 9: 9 1000 1 50 OK
#10: 10 1000 1 50 OK
#11: 11 1000 1 50 Discard
#12: 12 1000 1 50 Discard
#13: 13 1000 1 61 OK
#14: 14 1000 1 61 OK
#15: 15 1000 1 61 OK
#16: 16 1000 1 61 Discard
#17: 17 1000 1 61 Discard
#18: 18 1000 1 58 OK
库(data.table)
setDT(df)
df[,,
注释:=ifelse(seq_len(.N)使用数据。表
:
library(data.table)
setDT(df)
df[,
Comment := ifelse(seq_len(.N) <= 3, 'OK', 'Discard'),
.(Store, RTU, rleid(Temperature))
][]
# Time Store RTU Temperature Comment
# 1: 1 1000 1 54 OK
# 2: 2 1000 1 54 OK
# 3: 3 1000 1 54 OK
# 4: 4 1000 1 54 Discard
# 5: 5 1000 1 54 Discard
# 6: 6 1000 1 56 OK
# 7: 7 1000 1 57 OK
# 8: 8 1000 1 50 OK
# 9: 9 1000 1 50 OK
#10: 10 1000 1 50 OK
#11: 11 1000 1 50 Discard
#12: 12 1000 1 50 Discard
#13: 13 1000 1 61 OK
#14: 14 1000 1 61 OK
#15: 15 1000 1 61 OK
#16: 16 1000 1 61 Discard
#17: 17 1000 1 61 Discard
#18: 18 1000 1 58 OK
库(data.table)
setDT(df)
df[,,
注释:=ifelse(seq_len(.N)我想将前3个连续出现的事件标记为“OK”,4+我想标记为“Discard”。在您的示例中,时间1-3在标志温度检查列中会有“OK”。虽然它对示例数据没有影响,但我怀疑OP需要分组依据(标志,add=TRUE)
@halfmegle抱歉。问题是我没有使用行号()
。而是检查了n()
。我真的很傻。@halfmeggle如果您愿意,您可以删除分析中需要的其他列。我很欣赏创建data.frame的清晰解释和代码。这使事情变得更简单。@halfmeggle让一些聊天信息变得清晰,以供将来的用户使用。谢谢我想将前3个连续出现的事件标记为“OK”和4+我想标记为“Discard”。在您的示例中,时间1-3将在Flag\u Temperature\u Check列中显示“OK”。虽然它对示例数据没有影响,但我怀疑OP需要group\u by(Flag,add=TRUE)
@halfmeggle抱歉。问题是我没有使用行数()
。而是检查n()
。我真的很傻。@halfmeggle如果你愿意,你可以删除分析中需要的其他列。我很欣赏创建data.frame的清晰解释和代码。这使事情变得更简单。@halfmeggle让一些聊天信息变得清晰,以供将来的用户使用。谢谢