我觉得这有一个dplyr
解决方案,但我无法到达那里。
我有一个数据框:
Name Job ID1 ID2
Name1 Job1 ID1a ID2a
ID1a ID2a
Name2 Job2 ID1b ID2b
Name3 Job3 ID1c ID2c
每当重复ID1和ID2列值时,我想插入一个名为'wait'的字符串。所以最终的数据框应如下所示:
Name Job ID1 ID2
Name1 Job1 ID1a ID2a
wait ID1a ID2a
Name2 Job2 ID1b ID2b
Name3 Job3 ID1c ID2c
我的数据框中有数万行。这些重复ID经常发生。我希望每次重复ID1和ID2时插入相同的'wait'字符串。我怎么能在R?中做到这一点?
答案 0 :(得分:3)
数据
df <- read.table(text="Name Job ID1 ID2
Name1 Job1 ID1a ID2a
NA NA ID1a ID2a
Name2 Job2 ID1b ID2b
Name3 Job3 ID1c ID2c", header=TRUE)
您可以使用data.table::rleid
对连续的重复ID值进行分组
library(dplyr)
ans <-
df %>%
group_by(G = data.table::rleid(paste(ID1, ID2))) %>%
mutate(Job = c(head(Job, 1), rep("wait", times=n()-1))) %>%
ungroup %>%
select(-G)
ans
# Name Job ID1 ID2
# 1 Name1 1 ID1a ID2a
# 2 <NA> wait ID1a ID2a
# 3 Name2 2 ID1b ID2b
# 4 Name3 3 ID1c ID2c
答案 1 :(得分:1)
以下是使用data.table
library(data.table)
setDT(df)[df[, .I[seq_len(.N) > 1], .(rleid(ID1, ID2))]$V1, Job := 'wait']
df
# Name Job ID1 ID2
#1: Name1 Job1 ID1a ID2a
#2: <NA> wait ID1a ID2a
#3: Name2 Job2 ID1b ID2b
#4: Name3 Job3 ID1c ID2c