R:基于两行中的连续值,填充第三行

时间:2018-06-07 21:53:21

标签: r

我觉得这有一个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?中做到这一点?

2 个答案:

答案 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